Beeinflusst ein Alias ​​einen anderen Alias?

14

Ich habe noch nicht viele Aliase in meiner .bash_aliases-Datei eingerichtet. Erst kürzlich habe ich entdeckt, wie nützlich sie sein können.

Bevor die Datei zu unhandlich wird, möchte ich etwas klarstellen, indem ich eine sehr einfache Frage stelle. Beeinflusst ein Alias ​​einen anderen oder kehrt der Alias ​​immer zum ursprünglichen Befehl zurück?

Ein Beispiel kann dies klarer machen:

Ich habe mich darauf lsgeeinigt ls -lF. Angenommen, ich möchte auch einen Alias dfür ls -l | grep -E "^d": verwendet djetzt ls -lFanstelle von ls? Wenn ja, ist es eine Frage der Reihenfolge in der Konfigurationsdatei .bash_aliases?

man alias hat mich nicht aufgeklärt.

boehj
quelle

Antworten:

20

Aus Aliases (Abschnitt 6.6 des Bash-Handbuchs) :

Das erste Wort jedes einfachen Befehls wird, wenn es nicht in Anführungszeichen gesetzt ist, überprüft, um festzustellen, ob es einen Alias ​​hat. In diesem Fall wird dieses Wort durch den Text des Alias ​​ersetzt.

Dies geschieht , wenn Sie verwenden den Alias, nicht , wenn Sie es definieren. Hier ist ein Beispiel:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found
cjm
quelle
1
OK, toll, danke für das Beispiel (und auch für den Link zum Bash-Handbuch). Ich zitiere aus dem Handbuch: "Die Regeln für die Definition und Verwendung von Aliasen sind etwas verwirrend ... In fast allen Fällen werden Shell-Funktionen Aliasen vorgezogen." Ich denke, ich sollte dann besser lernen, wie man Shell-Funktionen ausführt. :)
Boehj
1
Ja. Aliase können das Eingeben von häufig verwendeten Befehlen ersparen, aber für alle Fälle, in denen das Schreiben von benutzerdefinierten Funktionen aus der Ferne komplexer ist, ist dies normalerweise eine bessere Option.
Caleb
@Caleb @Gilles - Danke Leute. BTW, ls = 'ls --color' Ich kann sehen, dass es sehr praktisch ist. Liebe diese Seite. :)
Boehj
2
@boehj: Eine Faustregel ist, einen Alias ​​zu verwenden, wenn Sie automatische Argumente für einen Befehl verwenden möchten, wobei der Name des Befehls oder eine geringfügige Variation verwendet wird und andere Funktionen verwendet werden. Also alias ls='ls --color', alias cp='cp -i'aber funktioniert für komplexere Sachen. Insbesondere würde ich Sie zu deiner Funktion machen, an die Sie Argumente übergeben können ls. [Kommentar neu gepostet, um verwirrendes Braino zu beheben, danke @cjm]
Gilles '
@Gilles - OK, meine Aufgabe für heute ist es, mir selbst beizubringen, wie man dals Shell-Funktion repliziert .
Boehj