
Ich bin auf fish
Shell umgestiegen und bin damit ziemlich zufrieden. Ich habe nicht verstanden, wie ich mit Booleans umgehen kann. Ich habe es geschafft, etwas zu schreiben, config.fish
das ausgeführt wird tmux
( ssh
siehe: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 fish
Shell 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 $status
es speichern und sie test
als Ganzzahlen mit vergleichen kann, aber ich finde es hässlich und noch unlesbarer. Das Problem besteht also darin, $status
es wiederzuverwenden und sie in if
und 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"