Wie man Funktionen in der Fish Shell unter Linux verwaltet
Der functions-Befehl in der Fish-Shell wird zum Verwalten und Interagieren mit Fish-Funktionen verwendet. Er ermöglicht es Ihnen, Funktionen aufzulisten, zu bearbeiten, zu löschen und sogar zu speichern. In diesem Tutorial werden wir lernen, wie man Funktionen in der Fish-Shell verwaltet, mit Beispielen unter Linux.
Was ist der functions-Befehl?
In Fish Shell sind Funktionen Blöcke wiederverwendbaren Codes, die Sie definieren und nach Namen aufrufen können. Der Befehl functions ist ein eingebautes Werkzeug, das Ihnen hilft, diese Funktionen zu verwalten. Sie können ihn verwenden, um:
- Liste alle Funktionen auf.
- Den Code einer bestimmten Funktion anzeigen.
- Eine Funktion bearbeiten.
- Eine Funktion löschen (entfernen).
- Funktionen in eine Datei speichern.
Wann und warum den functions-Befehl verwenden?
- Effizienz: Funktionen schnell verwalten und ändern, ohne Konfigurationsdateien manuell bearbeiten zu müssen.
- Fehlerbehebung: Funktionen einfach überprüfen und Probleme beheben.
- Portabilität: Funktionen systemübergreifend speichern und teilen.
- Flexibilität: Eingebaute Befehle mit benutzerdefiniertem Verhalten überschreiben oder erweitern.
Verwalten von Funktionen in der Fish-Shell
1. Eine neue Funktion definieren (erstellen)
Es gibt zwei Möglichkeiten, eine neue Funktion zu definieren. Sie können sie entweder direkt in der Fish-Konfigurationsdatei (~/.config/fish/config.fish) definieren oder in einer separaten Datei in einem benutzerdefinierten Verzeichnis (z. B. ~/.config/fish/functions/) definieren.
Der Hauptunterschied zwischen dem Definieren einer Funktion in ~/.config/fish/config.fish und dem Speichern in ~/.config/fish/functions/ liegt darin, wie Fish das Laden und Ausführen von Funktionen handhabt.
1.1. Definieren einer Funktion in config.fish
Wenn Sie eine Funktion direkt in ~/.config/fish/config.fish hinzufügen, wird sie jedes Mal ausgeführt, wenn eine neue Fish-Shell startet.
Beispiel :
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endVorteile:
- Läuft, wenn Fish startet.
- Gut für kleine Funktionen oder schnelle Anpassungen.
Nachteile:
- Wenn Sie viele Funktionen in
config.fishhaben, kann es unübersichtlich werden. - Funktionen werden nur geladen, wenn eine neue Shell gestartet wird, was bedeutet, dass Änderungen ein Neustarten von Fish (
exec fishoder erneutes Öffnen des Terminals) erfordern. - Langsamere Startzeit, wenn
config.fishviele Funktionen enthält.
1.2. Speichern einer Funktion in einem benutzerdefinierten Verzeichnis
Wenn Sie funcsave function_name verwenden oder manuell eine Datei in ~/.config/fish/functions/ erstellen, lädt Fish die Funktion automatisch, wenn sie benötigt wird.
Erstellen Sie zunächst die Funktion in Ihrer aktuellen Fish-Sitzung:
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endZu diesem Zeitpunkt wird die Funktion in Ihrer Sitzung funktionieren, aber sie wird verschwinden, wenn Sie Fish neu starten.
Um eine definierte Funktion dauerhaft zu speichern, können wir den Befehl funcsave verwenden.
funcsave cdlsDies speichert cdls in ~/.config/fish/functions/cdls.fish, der Folgendes enthält:
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endVorteile:
- Fish lädt die Funktion nur bei Verwendung, wodurch der Startvorgang schnell bleibt.
- Funktionen werden separat gespeichert, was sie leichter zu verwalten macht.
- Sie können eine Funktion dauerhaft löschen, indem Sie ihre
.fish-Datei entfernen, ohneconfig.fishzu bearbeiten.
Nachteile:
- Erfordert einen zusätzlichen Schritt zum Speichern (
funcsave function_nameoder das manuelle Erstellen einer.fish-Datei). - Für neue Benutzer könnte nicht offensichtlich sein, wo die Funktion gespeichert ist.
Beste Praxis?
- Wenn die Funktion klein und essentiell ist (z. B. eine alias-ähnliche Funktion), ist es in Ordnung, sie zu
config.fishhinzuzufügen. - Wenn die Funktion gelegentlich verwendet oder komplex ist, ist es besser, sie in
~/.config/fish/functions/zu speichern, um die Organisation und Leistung zu verbessern.
2. Alle Funktionen auflisten
Um eine Liste aller derzeit in Ihrer Fish-Shell definierten Funktionen zu sehen, verwenden Sie:
functionsDies zeigt die Namen aller Funktionen an, einschließlich der integrierten und der von Ihnen erstellten benutzerdefinierten Funktionen.
Beispielausgabe:
N_, abbr, alias, bg, cd, cdh, cdls, contains_seq, delete-or-exit, diff, dirh,
dirs, disown, down-or-search, edit_command_buffer, export, fg, fish_add_path,
fish_breakpoint_prompt, fish_clipboard_copy, fish_clipboard_paste,
fish_command_not_found, fish_commandline_append, fish_commandline_prepend,
fish_config, fish_default_key_bindings, fish_default_mode_prompt,
fish_git_prompt, fish_greeting, fish_hg_prompt, fish_hybrid_key_bindings,
fish_indent, fish_is_root_user, fish_job_summary, fish_key_reader,
fish_mode_prompt, fish_opt, fish_print_git_action, fish_print_hg_root,
fish_prompt, fish_sigtrap_handler, fish_status_to_signal, fish_svn_prompt,
fish_title, fish_update_completions, fish_vcs_prompt, fish_vi_cursor,
fish_vi_key_bindings, funced, funcsave, grep, help, history, isatty, kill, la,
ll, ls, man, nextd, nextd-or-forward-word, open, popd, prevd,
prevd-or-backward-word, prompt_hostname, prompt_login, prompt_pwd, psub, pushd,
realpath, seq, setenv, suspend, trap, umask, up-or-search, vared, wait3. Die Definition einer Funktion ansehen
Um den Code einer bestimmten Funktion anzusehen, verwenden Sie:
functions <function_name>Zum Beispiel, um den Code für die cdls-Funktion zu sehen:
functions cdlsDies wird die gesamte Definition der cd-Funktion ausgeben.
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
end4. Eine Funktion bearbeiten
Sie können eine Funktion direkt in Ihrem Standard-Texteditor bearbeiten mit:
funced <function_name>Zum Beispiel, um die cd-Funktion zu bearbeiten:
funced cdlsDies öffnet die Funktion in Ihrem Editor (z. B. nano oder vim), sodass Sie sie bearbeiten können. Sobald Sie speichern und den Editor verlassen, treten die Änderungen sofort in Kraft.
5. Eine Funktion in einer Datei speichern
Dies ist DASSELBE wie das Erstellen neuer Funktionen mit dem Befehl funcsave.
Definieren Sie zunächst die Funktion in der aktuellen Sitzung.
Wenn Sie die Definition einer Funktion in einer Datei speichern möchten, verwenden Sie:
functions <function_name> > filename.fishZum Beispiel, um die cdls-Funktion in einer Datei zu speichern:
functions cdls > ~/.config/fish/functions/cdls.fishDies ist nützlich zum Sichern oder Teilen von Funktionen.
6. Eine Funktion kopieren
Sie können eine bestehende Funktion unter einem neuen Namen mit dem -c oder --copy-Flag kopieren:
functions --copy <old_function_name> <new_function_name>Zum Beispiel, um die cd-Funktion in eine neue Funktion namens mycd zu kopieren:
functions --copy cd mycdJetzt können Sie mycd ändern, ohne die ursprüngliche cd-Funktion zu beeinflussen.
7. Eine Funktion löschen
Um eine Funktion aus der aktuellen Sitzung zu löschen, verwenden Sie das Flag -e oder --erase:
functions --erase <function_name>Zum Beispiel, um eine benutzerdefinierte cdls-Funktion zu entfernen:
functions --erase cdlsDies entfernt cdls, wirkt sich jedoch nicht auf permanente Funktionen aus, die in config.fish oder im Verzeichnis ~/.config/fish/functions/ gespeichert sind.
Um eine Funktion dauerhaft zu entfernen, öffnen Sie die Fish-Konfigurationsdatei und kommentieren Sie die gesamte Funktion aus oder löschen Sie sie.
Nachdem die Funktion entfernt wurde, starten Sie Fish neu, um die Änderungen anzuwenden:
exec fishOder starte dein Terminal neu.
Wenn Sie die Funktion mit funcsave gespeichert oder sie manuell erstellt haben, speichert Fish sie in ~/.config/fish/functions/.
Um es dauerhaft zu entfernen, löschen Sie einfach die Funktionsdatei:
rm ~/.config/fish/functions/function_name.fishBeispiel:
rm ~/.config/fish/functions/cdls.fishUnd dann den Fisch neu laden oder das Terminal neu starten.
Zusammenfassung der functions Befehlsoptionen
| Befehl | Beschreibung |
|---|---|
Funktionen | Liste alle Funktionen auf. |
Funktionen <Funktionsname> | Den Code einer bestimmten Funktion anzeigen. |
funced <Funktionsname> | Bearbeiten Sie eine Funktion in Ihrem Standard-Texteditor. |
functions --erase <Funktionsname> | Eine Funktion löschen. |
functions --copy <alt> <neu> | Kopiere eine Funktion unter einem neuen Namen. |
functions <name> > file.fish | Speichere die Definition einer Funktion in einer Datei. |
Fazit
Der Befehl functions ist ein unverzichtbares Werkzeug für Fish-Shell-Nutzer. Er gibt Ihnen die volle Kontrolle über Ihre Shell-Umgebung und macht die Arbeit mit Funktionen zum Kinderspiel. Für weitere Details verweisen Sie auf den Abschnitt Funktionen in der offiziellen Dokumentation der Fish-Shell.
Verwandte Lektüre:
- Wie man im Fish Shell Verzeichnis wechselt und Dateien in einem Befehl auflistet
- So verwalten Sie Bash-Funktionen mit dem Befehl declare in Linux
