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"