Wie verwende ich Boolesche Werte in der Fischschale?

Wie verwende ich Boolesche Werte in der Fischschale?

Ich bin auf fishShell umgestiegen und bin damit ziemlich zufrieden. Ich habe nicht verstanden, wie ich mit Booleans umgehen kann. Ich habe es geschafft, etwas zu schreiben, config.fishdas ausgeführt wird tmux( sshsiehe:Wie kann ich tmux automatisch in der Fish-Shell starten, während ich mich über SSH mit dem Remote-Server verbinde?) Verbindung, aber ich bin mit der Lesbarkeit des Codes nicht zufrieden und möchte mehr über fishShell erfahren (ich habe das Tutorial bereits gelesen und die Referenzen 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 $statuses speichern und sie testals Ganzzahlen mit vergleichen kann, aber ich finde es hässlich und noch unlesbarer. Das Problem besteht also darin, $statuses wiederzuverwenden und sie in ifund zu verwenden test.

Wie kann ich so etwas erreichen?

Antwort1

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 setzen:

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. begin/end ersetzen 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"

(Das erste begin/end ist nicht unbedingt erforderlich, verbessert aber meiner Meinung nach die Übersichtlichkeit.)

Eine dritte Möglichkeit ist das Ausklammern von Funktionen:

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"

verwandte Informationen