Přešel jsem na fish
shell a docela spokojený s ním. Nechápal jsem, jak zvládnu booleany. Podařilo se mi napsat config.fish
který spouští tmux
na ssh
(viz:Jak mohu automaticky spustit tmux v rybím shellu při připojení ke vzdálenému serveru přes ssh) připojení, ale nejsem spokojen s čitelností kódu a chci se dozvědět více o fish
shell (už jsem četl tutoriál a prohlédl jsem si reference). Chci, aby kód vypadal takto (vím, že syntaxe není správná, chci jen ukázat myšlenku):
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
Vím, že mohu uložit $status
es a porovnejte je s test
jako celá čísla, ale myslím, že je to ošklivé a ještě více nečitelné. Problém je tedy znovu použít $status
es a použijte je v if
a test
.
Jak mohu něčeho takového dosáhnout?
Přijatá odpověď:
Můžete to strukturovat jako řetězec if/else. Je možné (i když nepraktické) použít begin/end k zadání složeného příkazu jako podmínky 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
Hezčí styl jsou booleovské modifikátory. začátek/konec nahradí závorku:
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"
(První začátek/konec není nezbytně nutný, ale zlepšuje přehlednost IMO.)
Třetí možností je rozdělení funkcí:
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"