Ist eine Shell-Funktion besser als die gleiche Funktion in PATH?

973
Léo Léopold Hertz 준영

Ich bin etwas verwirrt über die fremde Verwendung von Shell-Funktionen.

Meine Definition einer Shell-Funktion : Eine Funktion, die in .bashrc so ist

.bashrc

--- other default bash configs ----  extract() { // I call this a shell function .... } 

Meine Definition einer Funktion in PATH : Eine Datei, deren Ordner sich in PATH befindet. Zum Beispiel haben wir die Datei ~ / bin / screen / convert.screen

Um die Datei und andere Dateien im Ordner meinem PFAD hinzuzufügen, kann ich den folgenden PFAD verwenden

 export PATH='/Users/masi/bin/screen:' 

Ich würde gerne wissen, wann ich die Funktion als Login-Shell-Funktion und wann zu meinem PFAD stellen sollte. Letzteres ziehe ich im Moment vor, da erstere die Wartungskosten erhöht.

Was ist der Vorteil einer benutzerdefinierten Shell-Funktion, die eine Funktion in PATH nicht hat?

1
Könnten Sie das näher ausführen? Es fällt mir schwer zu verstehen, was Sie fragen. Sasha Chedygov vor 15 Jahren 1
@musicfreak: Ich habe meinem Beitrag meine Definitionen der angegebenen Funktionen hinzugefügt. Léo Léopold Hertz 준영 vor 15 Jahren 0

3 Antworten auf die Frage

4
John T

Shell-Funktionen können leicht geändert und verwaltet werden. Sie sollten diese zu Ihrem PATH hinzufügen, wenn Sie wissen, dass Sie sie immer brauchen werden (auch wenn es viel seltener ist), als wenn Sie eine temporäre Sache sind. Es ist nicht erforderlich, eine so große RC-Datei zu laden, die Sie ständig hinzufügen, wenn Sie wissen, dass Sie nicht immer alles darin benötigen. Wenn Sie eine große Funktion verwenden, die Sie seltener verwenden, diese jedoch sehr wichtig ist, machen Sie sie von Ihrer PATHWebsite aus zugänglich, damit Sie nur dann auf sie zugreifen können, wenn Sie sie benötigen.

Sie meinen also, dass Apps in PATH beim Login nicht geladen werden. Ihre Namen werden stattdessen auf die Liste gesetzt, die die Programme im PFAD präsentiert. Wenn Sie TAB haben, wird diese Liste durchsucht. --- Ich hatte noch nie so große Shell-Apps, die den Computer verlangsamen würden. Es scheint, dass es besser ist, sehr große Shell-Apps zu PATH hinzuzufügen, wenn dies sonst zu einer Verringerung der Geschwindigkeit führt. Léo Léopold Hertz 준영 vor 15 Jahren 0
1
nik

Es wäre hilfreich, wenn Sie mit der allgemein akzeptierten Beschreibung der Shell-Funktion als eine in einer Datei (Skript) geschriebene Funktion einverstanden wären , die zum Laden in Ihre Shell bereitgestellt und in anderen Scripts und Shell-Befehlen verwendet werden kann .

Wenn wir diese Interpretation des Begriffs verwenden, erleichtern Shell-Funktionen Ihr Leben mit "Funktionen" in Ihren Skripten und Befehlen.

Wenn Sie weiter gehen, können Sie auch in Erwägung ziehen, Ihre weniger häufig verwendeten "Funktionen" in eine separate Datei zu schreiben und diese mit Ihren anderen Skripts zu speichern. Wenn Sie diese benötigen, könnten Sie einfach Quelle das Skript in der Shell.

Die Shell-Funktion ist also eine Funktion, die Sie von PATH beziehen, sodass Sie sie bei Bedarf laden und aufrufen können. Léo Léopold Hertz 준영 vor 15 Jahren 0
@Masi und auch eine Funktion, die in Ihre verwendete Skriptdatei geschrieben wurde und für deren Verwendung verfügbar ist. Ja. nik vor 15 Jahren 1
1
Telemachus

Ich benutze Shell-Funktionen für Dinge, die recht klein und in sich abgeschlossen sind und die eher Hilfsbefehle für die Shell sind, als für sich selbst volle Programme. Sobald etwas zu einem richtigen Programm wird, schreibe ich es als solches auf und verschiebe es in das bin- Verzeichnis in meinem $HOMEOrdner (der sich bereits in meinem befindet PATH).

Hier ist ein Beispiel:

# Start mpd (if necessary), search for music using mpc, play music. mp-start() { ps -C mpd > /dev/null || mpd mpc search any $1 | mpc add - mpc play } 

Das ist eine Funktion, kein Programm. Es ist sehr wenig dabei und ich werde es nur verwenden, wenn ich bereits in der Shell arbeite.

Ich finde es auch sauberer, alle Funktionen für meine Shell in einer separaten Datei zu speichern ( .bash_functions für mich, aber ich denke, Sie sind ein Z-Shell-Benutzer, passen Sie also entsprechend an), die ich aus der primären RC-Datei meiner Shell bezieht. Ein letzter Tipp: Fügen Sie Ihren Aliasnamen Folgendes hinzu:

alias refunction='vim ~/.bash_functions; source ~/.bash_functions' 

So können Sie schnell eine neue Funktion erstellen und nach der Bearbeitung sofort verfügbar machen.