Bash-Alias, der ein Skript aufruft, im Vergleich zur Definition des Skripts als Funktion

Bash-Alias, der ein Skript aufruft, im Vergleich zur Definition des Skripts als Funktion

Ich habe über 150 Tastenkombinationen in meiner .bash_aliases-Datei definiert. Einige davon sind einfache Befehle, zum Beispiel:

# Opens file with default program
o () { xdg-open "$@" & disown; }

# Folder shortcuts
alias ..='cd .. && ls'

Andere rufen ein Skript auf, das ich irgendwo anders auf dem Computer habe, wie etwa:

alias i3exit='~/.config/i3/i3exit.sh'

Und andere sind größere Skripte, die wie der oobige Befehl definiert sind, nur mit 30–80 Zeilen.

Was ist der Unterschied zwischen einem Skript, das direkt als Bash-Funktion definiert ist, und einem Alias, der ein Skript aus einer anderen Datei aufruft? Ist das eine dem anderen vorzuziehen und wenn ja, warum?

Meine Intuition sagt mir, dass separate Skriptdateien besser wären, aber ich habe keine Argumente dafür.

Antwort1

Wenn Sie diese in Ihrer ~/.bash_aliasesDatei definieren, die eine Ubuntu-spezifische Sache ist und ~/.bashrcin einer Standard-Ubuntu-Installation als Quelle verwendet wird, dann gibt es tatsächlich einen Overhead, da die Datei jedes Mal als Quelle verwendet wird, wenn Sie eine neue interaktive Shell ohne Anmeldung starten. Also jedes Mal, wenn Sie beispielsweise ein neues Terminalfenster öffnen. Bei modernen Maschinen ist dieser Overhead höchstwahrscheinlich nicht erkennbar, aber er kann ein Problem für ältere Maschinen, eingebettete Systeme oder wenn Sie anfangen,Ladungenvon komplexen Funktionen definiert.

Darüber hinaus sind auf diese Weise definierte Funktionen und Aliase standardmäßig nicht für Skripte zugänglich. Wenn Sie also eine dieser Funktionen in Ihren Skripten verwenden möchten, müssen Sie .bashrc(oder .bash_aliases) explizit als Quelle angeben. Wenn Sie sie als externe Skriptdateien in Ihrem haben $PATH, ist das nicht erforderlich.

Meine persönliche Faustregel hängt von der Komplexität der beteiligten Befehle ab und davon, ob die Funktion/das Skript, das ich schreibe, wahrscheinlich für nicht interaktive Shells (z. B. andere Skripte) nützlich ist oder nicht. Wenn ich mehrere Dutzend Zeilen Code schreibe, verschiebe ich es wahrscheinlich in ein Skript. Wenn ich etwas schreibe, das in vielen verschiedenen Kontexten verwendet werden kann und wahrscheinlich beim Schreiben eines anderen Skripts nützlich sein könnte, verschiebe ich es ebenfalls in ein Skript.

Wenn ich jedoch nur eine einfache kleine Funktion wie die in Ihrer Frage gezeigte möchte, die nur bei interaktiver Ausführung wirklich nützlich ist, dann bleibe ich bei Funktionen. Es ist also wirklich eine Frage Ihrer persönlichen Vorlieben und der Überlegung, wie und wann Sie die von Ihnen definierten Funktionen verwenden möchten.

verwandte Informationen