Ich habe fast 10 Jahre Linux-Nutzung gebraucht, um diese Frage zu stellen. Es war alles Versuch und Irrtum und zufälliges nächtliches Surfen im Internet.
Aber die Leute sollten dafür keine 10 Jahre brauchen. Wenn ich gerade erst mit Linux anfangen würde, würde ich wissen wollen:Wann soll ich Alias verwenden, wann Skripte schreiben und wann eine Funktion schreiben?
Wenn es um Aliase geht, verwende ich Aliase für sehr einfache Operationen, die keine Argumente benötigen.
alias houston='cd /home/username/.scripts/'
Das scheint offensichtlich. Aber einige Leute tun dies:
alias command="bash bashscriptname"
(und fügen Sie es der .bashrc
hinzu Datei)
Gibt es einen guten Grund dafür? Ich bemühe mich wirklich sehr, aber ich kann mir wirklich keine Umstände vorstellen, unter denen ich das tun möchte. Wenn es also einen Grenzfall gibt, in dem dies einen Unterschied machen würde, antworten Sie bitte unten.
Denn dort würde ich einfach etwas in meinen PATH und chmod +x
einfügen it, was ebenfalls nach Jahren des Linux-Trial-and-Error herausgekommen ist.
Was mich zum nächsten Thema bringt. Zum Beispiel habe ich einen versteckten Ordner hinzugefügt (.scripts/
) im Home-Verzeichnis zu meinem PATH hinzufügen, indem Sie einfach eine Zeile zu meiner .bashrc
hinzufügen (PATH=$PATH:/home/username/.scripts/
), sodass alles, was darin ausführbar ist, automatisch automatisch vervollständigt wird.
Falls nötig.
Das brauche ich aber nicht unbedingt, oder? Ich würde das nur für Sprachen verwenden, die nicht die Shell sind, wie Python.
Wenn es die Shell ist, kann ich einfach eine Funktion innerhalb derselben .bashrc
schreiben :
funcname () {
somecommand -someARGS "[email protected]"
}
Wie ich schon sagte, habe ich viel davon durch Versuch und Irrtum herausgefunden. Und ich habe die Schönheit der Funktionen erst wirklich gesehen, als mein Computer starb und ich gezwungen war, die Computer der Menschen um mich herum zu benutzen, wenn sie sie nicht benutzten.
Anstatt ein ganzes Verzeichnis mit Skripten von Computer zu Computer zu verschieben, habe ich am Ende einfach die .bashrc-Datei aller anderen durch meine eigene ersetzt, da sie nie auch nur eine einzige Änderung vorgenommen hatten.
Aber habe ich etwas verpasst?
Also, was würden Sie einem beginnenden Linux-Anwender dazu sagen, wann ein Alias, wann ein Skript und wann eine Funktion geschrieben werden soll?
Wenn es nicht offensichtlich ist, gehe ich davon aus, dass die Leute, die darauf antworten, alle drei Optionen nutzen werden. Wenn Sie nur Aliase oder nur Skripte oder nur Funktionen verwenden – oder wenn Sie nur Aliase und Skripte oder Aliase und Funktionen oder Skripte und Funktionen verwenden – Diese Frage ist nicht wirklich an Sie gerichtet.
Akzeptierte Antwort:
Ein Alias sollte (im Allgemeinen) nicht mehr tun, als die Standardoptionen eines Befehls zu ändern. Es ist nichts weiter als eine einfache Textersetzung für den Befehlsnamen. Es kann nichts mit Argumenten anfangen, sondern sie an den Befehl übergeben, den es tatsächlich ausführt. Wenn Sie also einfach ein Argument am Anfang eines einzelnen Befehls hinzufügen müssen, funktioniert ein Alias. Gängige Beispiele sind
# Make ls output in color by default.
alias ls="ls --color=auto"
# make mv ask before overwriting a file by default
alias mv="mv -i"
Eine Funktion sollte verwendet werden, wenn Sie etwas Komplexeres als einen Alias tun müssen, dies jedoch alleine nicht sinnvoll wäre. Nehmen Sie zum Beispiel diese Antwort auf eine Frage, die ich zum Ändern von grep
gestellt habe Standardverhalten abhängig davon, ob es sich in einer Pipeline befindet:
grep() {
if [[ -t 1 ]]; then
command grep -n "[email protected]"
else
command grep "[email protected]"
fi
}
Es ist ein perfektes Beispiel für eine Funktion, weil es für einen Alias zu komplex ist (es erfordert unterschiedliche Standardwerte basierend auf einer Bedingung), aber es ist nichts, was Sie in einem nicht interaktiven Skript benötigen.
Verwandte:Wie lässt sich ein Skript nachträglich als root ausführen?
Wenn Sie zu viele Funktionen oder Funktionen zu groß bekommen, legen Sie sie in separate Dateien in einem versteckten Verzeichnis und beziehen Sie sie in Ihr ~/.bashrc
:
if [ -d ~/.bash_functions ]; then
for file in ~/.bash_functions/*; do
. "$file"
done
fi
Ein Skript sollte für sich alleine stehen. Es sollte einen Wert haben, da es wiederverwendet oder für mehr als einen Zweck verwendet werden kann.