Führen Sie einen anderen Befehl aus, bevor Sie den Befehl ausführen, den der Benutzer ausführen möchte

Führen Sie einen anderen Befehl aus, bevor Sie den Befehl ausführen, den der Benutzer ausführen möchte

lsNehmen wir an, ich möchte das ursprüngliche Verhalten des Tools folgendermaßen ändern :

$ ls
Hello World
file1 file2 ...

Wie kann ich das machen?

Beim Ausführen lsmöchte ich beispielsweise einen anderen Befehl ausführen echo "Hello World!".

Die schnelle Lösung, die ich sehe, ist die Verwendung eines Alias:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Dies ist jedoch keine wirkliche Lösung, da beim Ausführen orig_lsFolgendes ausgegeben wird "Hello World!":

Antwort1

Manchmal ist ein Alias ​​nicht leistungsstark genug, um das gewünschte Ergebnis zu erzielen. Hier ist also eine Möglichkeit, ohne Alias ​​auszukommen.

Fügen Sie in einer Datei, die beim Starten Ihrer Shell als Quelle verwendet wird (z. B. .bashrc), die folgende Funktion hinzu:

ls () {
    echo "Hello world!"
    command ls "$@"
}

Im Gegensatz zu einem Alias ​​kann eine Funktion rekursiv sein. Aus diesem Grund command lswird anstelle von verwendet ls. Dadurch wird Ihre Shell angewiesen, die tatsächliche Funktion lsanstelle der gerade definierten Funktion zu verwenden.

Antwort2

Vergessen Sie nicht anzurufen ls:

alias ls='echo "Hello World!"; ls'

verwandte Informationen