GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwendet man Booleans in Fish Shell?

Ich bin auf fish umgestiegen Schale und sehr zufrieden damit. Ich habe nicht verstanden, wie ich mit booleschen Werten umgehen kann. Ich habe es geschafft, config.fish zu schreiben der tmux ausführt auf ssh (siehe:Wie kann ich tmux automatisch in Fish Shell starten, während ich mich per ssh mit dem Remote-Server verbinde), aber ich bin mit der Lesbarkeit des Codes nicht zufrieden und möchte mehr über fish erfahren Shell (Ich habe bereits das Tutorial gelesen und die Referenz durchgesehen). Ich möchte, dass der Code so aussieht (ich weiß, dass die Syntax nicht korrekt ist, ich möchte nur die Idee zeigen):

set PPID (ps --pid %self -o ppid --no-headers) 
if ps --pid $PPID | grep ssh 
    set attached (tmux has-session -t remote; and tmux attach-session -t remote) 
    if not attached 
        set created (tmux new-session -s remote; and kill %self) 
    end 
    if !(test attached -o created) 
        echo "tmux failed to start; using plain fish shell" 
    end 
end

Ich weiß, dass ich $status speichern kann es und vergleiche sie mit test als ganze Zahlen, aber ich finde es hässlich und noch unleserlicher. Das Problem besteht also darin, $status wiederzuverwenden es und verwenden Sie sie in if und test .

Wie kann ich so etwas erreichen?

Akzeptierte Antwort:

Sie können dies als if/else-Kette strukturieren. Es ist möglich (wenn auch umständlich), begin/end zu verwenden, um eine zusammengesetzte Anweisung als if-Bedingung zu verwenden:

if begin ; tmux has-session -t remote; and tmux attach-session -t remote; end
    # We're attached!
else if begin; tmux new-session -s remote; and kill %self; end
    # We created a new session
else
    echo "tmux failed to start; using plain fish shell"
end

Ein schönerer Stil sind boolesche Modifikatoren. Beginn/Ende ersetzen die Klammern:

begin
    tmux has-session -t remote
    and tmux attach-session -t remote
end
or begin
    tmux new-session -s remote
    and kill %self
end
or echo "tmux failed to start; using plain fish shell"

(Der erste Anfang/das erste Ende ist nicht unbedingt erforderlich, verbessert aber meiner Meinung nach die Klarheit.)

Das Ausklammern von Funktionen ist eine dritte Möglichkeit:

function tmux_attach
    tmux has-session -t remote
    and tmux attach-session -t remote
end

function tmux_new_session
    tmux new-session -s remote
    and kill %self
end

tmux_attach
or tmux_new_session
or echo "tmux failed to start; using plain fish shell"

Linux
  1. So verwenden Sie den Linux-Rsync-Befehl (Remote-Synchronisierung).

  2. So verwenden Sie Tmux + Cheat Sheet

  3. So verwenden Sie Shell-Aliase unter Linux

  4. Wie verwende ich den su-Befehl über die Adb-Shell?

  5. So stellen Sie eine Shell nach einer Verbindungsunterbrechung wieder her

So installieren und verwenden Sie die ZSH-Shell unter Linux

So verwenden Sie GNOME-Shell-Erweiterungen [Vollständige Anleitung]

So verwenden Sie SSH, um eine Verbindung zu einem Remote-Server herzustellen

So installieren und verwenden Sie Nu Shell unter Linux

Wie verwende ich if-else in Shell-Skripten?

Wie verwende ich die Linux-Bash-Shell in Windows 10?