Behalte Aliase, wenn ich Sudo Bash benutze

8

Ich habe einen Centos 5.5-Server mit eigenen Alias-Befehlen für mein Konto. Wenn ich sudo bashdiese Aliase weiterhin verwenden kann, musste ich die Aliase nicht zu den Wurzeln hinzufügen .bashrc.

Ich habe einen anderen Server, der Centos 6.5 ist. Bei der Ausführung sudo bashwerden jedoch nicht meine Aliase des Benutzers verwendet, unter dem ich angemeldet bin. Weiß jemand, wo ich es so konfiguriere, dass es die Aliase des Benutzers enthält, bei dem ich bei der Verwendung angemeldet bin sudo bash?

Tyler Knotek
quelle
Ich denke, Aliase werden über die Umgebung vererbt, daher funktioniert die Antwort hier möglicherweise: unix.stackexchange.com/questions/92998/…
Barmar
Die Version 5.5 hat wahrscheinlich $ HOME vom Anrufer erhalten, die Version 6.5 nicht. Siehe sudo sudo -VAusgabe und env_keepin der Sudoers-Manpage.
Stéphane Chazelas
1
Danke Barmar und Stephane. Ihre beiden Antworten haben mich in die richtige Richtung gelenkt. Ich musste Folgendes in sudoers einstellen: Defaults !always_set_homeund Defaults !env_reset`
Tyler Knotek

Antworten:

5

Fügen Sie Ihrem ~ / .bashrc die folgende Zeile hinzu:

alias sudo='sudo '

Aus dem Bash-Handbuch

Aliase ermöglichen das Ersetzen eines Wortes durch eine Zeichenfolge, wenn es als erstes Wort eines einfachen Befehls verwendet wird. Die Shell verwaltet eine Liste von Aliasen, die mit den in Alias ​​und Unalias integrierten Befehlen festgelegt und deaktiviert werden können.

Das erste Wort jedes einfachen Befehls wird, wenn es nicht in Anführungszeichen steht, überprüft, um festzustellen, ob es einen Alias ​​hat. In diesem Fall wird dieses Wort durch den Text des Alias ​​ersetzt. Die Zeichen '/', '$', '`', '=' und alle oben aufgeführten Shell-Metazeichen oder Anführungszeichen werden möglicherweise nicht in einem Aliasnamen angezeigt. Der Ersatztext kann eine gültige Shell-Eingabe enthalten, einschließlich Shell-Metazeichen. Das erste Wort des Ersatztextes wird auf Aliase getestet, aber ein Wort, das mit einem zu erweiternden Alias ​​identisch ist, wird nicht ein zweites Mal erweitert. Dies bedeutet, dass man beispielsweise den Alias ​​ls auf "ls -F" setzen kann und Bash nicht versucht, den Ersatztext rekursiv zu erweitern. Wenn das letzte Zeichen des Aliaswerts ein Leerzeichen oder ein Tabulatorzeichen ist, wird das nächste Befehlswort nach dem Alias ​​ebenfalls auf Aliaserweiterung überprüft.

Bash überprüft also nur das erste Wort eines Befehls auf einen Alias, danach werden alle Wörter nicht überprüft. Das heißt, in einem Befehl wie sudo ll wird nur das erste Wort (sudo) von bash auf einen Alias ​​überprüft, ll wird ignoriert. Wir können bash anweisen, das nächste Wort nach dem Alias ​​(dh sudo) zu überprüfen, indem wir am Ende des Aliaswerts ein Leerzeichen einfügen.

Antonizick
quelle
Funktioniert auch für zsh. Vielen Dank!
Dzhi
Dies erlaubt nur die Verwendung von Aliasen im sudoBefehl, z. B. sudo some_alias ...fragt OP, wie Aliase für seinen eigenen Benutzer definiert werden können, nachdem er mit zu einem anderen Benutzer gewechselt hat sudo. Nehmen wir an, ich habe some_aliasdefiniert. Bei sudoder rootVerwendung sudo suwird eine neue Umgebung erstellt und dieser Alias ​​ist dort nicht definiert. Es gibt den -EParameter des sudoBefehls, der die Umgebung exportieren soll, aber es sieht so aus, als wären Aliase nicht Teil davon.
David Ferenczy Rogožan
1

Verwenden Sie sudo -Ediese Option, um Ihre Umgebung zu exportieren.

Kaboom
quelle
2
enthält keine Aliase (getestet auf Ubuntu 16.04.1)
Antonios Hadjigeorgalis
Es funktioniert aber nur als sudo -E bash. Bei Verwendung mit suas bleiben sudo -E sudie in den Benutzern definierten .bashrcElemente (Aliase, Eingabeaufforderung usw.) nicht erhalten, obwohl es so aussieht, als würden Umgebungsvariablen in beiden Fällen beibehalten. Ich bin mir nicht sicher, wie genau das funktioniert.
David Ferenczy Rogožan