Website-Suche

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
end

Vorteile:

  • Läuft, wenn Fish startet.
  • Gut für kleine Funktionen oder schnelle Anpassungen.

Nachteile:

  • Wenn Sie viele Funktionen in config.fish haben, kann es unübersichtlich werden.
  • Funktionen werden nur geladen, wenn eine neue Shell gestartet wird, was bedeutet, dass Änderungen ein Neustarten von Fish (exec fish oder erneutes Öffnen des Terminals) erfordern.
  • Langsamere Startzeit, wenn config.fish viele 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
end

Zu 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 cdls

Dies 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
end

Vorteile:

  • 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, ohne config.fish zu bearbeiten.

Nachteile:

  • Erfordert einen zusätzlichen Schritt zum Speichern (funcsave function_name oder 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.fish hinzuzufü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:

functions

Dies 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, wait

Funktionen Befehlsausgabe in der Fish Shell

3. 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 cdls

Dies 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
end

4. 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 cdls

Dies ö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.fish

Zum Beispiel, um die cdls-Funktion in einer Datei zu speichern:

functions cdls > ~/.config/fish/functions/cdls.fish

Dies 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 mycd

Jetzt 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 cdls

Dies 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 fish

Oder 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.fish

Beispiel:

rm ~/.config/fish/functions/cdls.fish

Und dann den Fisch neu laden oder das Terminal neu starten.

Zusammenfassung der functions Befehlsoptionen

BefehlBeschreibung
FunktionenListe 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.fishSpeichere 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