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"