Je suis passé au fish
coque et très satisfait. Je n'ai pas compris comment gérer les booléens. J'ai réussi à écrire config.fish
qui exécute tmux
sur ssh
(voir :Comment puis-je démarrer tmux automatiquement dans fish shell lors de la connexion à un serveur distant via ssh) mais je ne suis pas satisfait de la lisibilité du code et je souhaite en savoir plus sur fish
shell (j'ai déjà lu le tutoriel et consulté les références). Je veux que le code ressemble à ça (je sais que la syntaxe n'est pas correcte, je veux juste montrer l'idée) :
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
Je sais que je peux stocker $status
es et comparez-les avec test
comme des entiers mais je pense que c'est moche et encore plus illisible. Le problème est donc de réutiliser $status
es et utilisez-les dans if
et test
.
Comment puis-je réaliser quelque chose comme ça ?
Réponse acceptée :
Vous pouvez structurer cela comme une chaîne if/else. Il est possible (bien que peu maniable) d'utiliser begin/end pour mettre une instruction composée comme condition if :
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
Un style plus agréable est les modificateurs booléens. début/fin remplacent les parenthèses :
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"
(Le premier début/fin n'est pas strictement nécessaire, mais améliore la clarté de l'OMI.)
La factorisation des fonctions est une troisième possibilité :
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"