Saya beralih ke fish shell dan cukup senang dengan itu. Saya tidak mengerti bagaimana saya bisa menangani boolean. Saya berhasil menulis config.fish yang mengeksekusi tmux di ssh (lihat:Bagaimana saya bisa memulai tmux secara otomatis di kulit ikan saat menghubungkan ke server jauh melalui ssh) koneksi tetapi saya tidak senang dengan keterbacaan kode dan ingin mempelajari lebih lanjut tentang fish shell (Saya sudah membaca tutorial dan melihat melalui referensi). Saya ingin kode terlihat seperti itu (saya tahu sintaksnya salah, saya hanya ingin menunjukkan ide):
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
Saya tahu bahwa saya dapat menyimpan $status es dan bandingkan dengan test sebagai bilangan bulat tapi saya pikir itu jelek dan bahkan lebih tidak terbaca. Jadi masalahnya adalah menggunakan kembali $status es dan gunakan dalam if dan test .
Bagaimana saya bisa mencapai sesuatu seperti ini?
Jawaban yang Diterima:
Anda dapat menyusun ini sebagai rantai if/else. Mungkin (meskipun berat) untuk menggunakan awal/akhir untuk menempatkan pernyataan majemuk sebagai kondisi 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
Gaya yang lebih bagus adalah pengubah boolean. awal/akhir menggantikan tanda kurung:
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"
(Awal/akhir pertama tidak sepenuhnya diperlukan, tetapi meningkatkan kejelasan IMO.)
Memfaktorkan keluar fungsi adalah kemungkinan ketiga:
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"