Unterschiede zwischen fish und bash, um Befehlszeilenargumente an Aliasfunktionen zu übergeben?

7

Aus den Antworten auf meine andere Frage hier habe ich die Möglichkeit kennengelernt, Befehlszeilenargumente an eine Alias-Funktion in Bash zu übergeben.

In Fish kann ich einen Alias ​​bearbeiten, indem ich die Datei config.fish im ~/.config/fishVerzeichnis bearbeite und eine Zeile wie diese hinzufüge

alias lsp='ls -ah --color=always | less -R;'

und es funktioniert perfekt. Dies sollte der Bearbeitung ~/.bash_aliasesin Bash entsprechen

Aber wenn ich versuche, eine Alias-Funktion einzurichten, um solche Argumente zu übergeben

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

es funktioniert nicht für Fische?

Gibt es Unterschiede zwischen fish und bash bei der Einrichtung eines Alias ​​zum Übergeben von Befehlszeilenargumenten, die verhindern, dass dieser zweite Alias ​​mit fish anstelle von bash funktioniert?

NES
quelle

Antworten:

9

Dieser zweite Befehl ist eigentlich ein kleines Bash-Skript. Bash ist die in die Shell integrierte Programmiersprache. Es wird von anderen Muscheln verwendet, aber nicht unbedingt, wie wir hier sehen.

Fish definiert eine völlig andere Programmiersprache als Bash , unterstützt jedoch einfache Aliase in der üblichen alias name=commandForm. Sie sollten stattdessen eine Funktion definieren. So würden Sie die obige Funktion in Fischen definieren:

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end

und funcsave lspso dauerhaft speichern.

Sie können nun die erwarteten Befehle ausführen, wie lsp, lsp -R, lsp *.png*und so weiter.

Sie können bash auch mit dem Programm 'sh' aufrufen, um ein Skript für Sie auszuführen (dies führt genauer gesagt 'dash' aus). Wenn Sie jedoch Fisch verwenden, möchten Sie wahrscheinlich die darin enthaltenen Methoden verwenden. Ich habe es gerade zum ersten Mal getestet und bin bisher sehr beeindruckt.

Die Funktionen werden als Datei .config/fish/functions/in Ihrem Home-Verzeichnis gespeichert . Der Dateiname lautet in diesem Beispiel lsp.fish. Sie können entweder die Datei bearbeiten und anschließend den Fisch neu starten oder die Funktion einfach definieren und erneut speichern.

Der beste Weg, um Fisch zu lernen, ist das Lesen der integrierten Hilfe. Geben Sie aus dem Fisch heraus einfach ein

help

und Sie erhalten ein sehr schön formatiertes, umfangreiches und einfach zu lesendes Handbuch. Tatsächlich öffnet dies den w3mWebbrowser, da die Hilfe im HTML-Format vorliegt:

Alt-Text

(Drücken Sie zum Beenden qy)

Stefano Palazzo
quelle
vielen Dank. Können diese Funktionen nachträglich bearbeitet werden, sobald sie bereits gespeichert sind? wo werden sie gelagert PS: Haben Sie ein gutes Tutorial dazu gefunden? Die Webseite mit der Dokumentation für Fische ist seit einigen Tagen nicht mehr verfügbar.
NES
Tatsächlich ist 'alias' in Fisch nur ein Shellscript-Wrapper um die eingebaute Funktion. Siehe lächerlichfish.com
shell
2

Ich habe noch nie einen solchen Apparat gesehen.

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

Ein Alias, der eine Funktion deklariert und ausführt. Sie sollten zunächst nur eine Funktion erstellen. In Bash ersetzen Funktionen Aliase in fast jeder Hinsicht.

lsp() { ls -ah --color=always "$@" | less -R; }

Fügen Sie das in Ihre ~/.bashrcDatei ein, oder wenn Sie Funktionen lieber in einer separaten Datei ablegen möchten, ~/.bash_functionskönnen Sie dies tun, aber Sie müssen sourcediese Datei von~/.bashrc

Geirha
quelle