Saya suka menyimpan bash_profile saya dalam repositori git dan mengkloningnya ke mesin apa pun yang saya miliki akses Shellnya. Karena saya di tmux sebagian besar waktu saya memiliki [email protected] string di baris status, bukan tempat tradisionalnya di prompt shell.
Tidak semua situs yang saya gunakan memiliki tmux diinstal, atau saya mungkin tidak selalu menggunakannya. Saya ingin mendeteksi ketika saya tidak dalam tmux sesi dan sesuaikan Prompt saya. Sejauh ini solusi saya yang setengah matang di .bash_profile terlihat seperti ini:
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(Memeriksa setiap saat mungkin bukan pendekatan terbaik, jadi saya terbuka dengan saran untuk cara yang lebih baik dalam melakukan ini. Skrip Bash bukanlah keahlian saya.)
Jawaban yang Diterima:
Tmux menyetel TMUX variabel lingkungan dalam sesi tmux, dan set TERM ke screen . Ini bukan indikator yang 100% andal (misalnya, Anda tidak dapat dengan mudah mengetahui apakah Anda menjalankan screen di dalam tmux atau tmux di dalam screen ), tetapi harus cukup baik dalam praktiknya.
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
Jika Anda perlu mengintegrasikannya dalam set prompt yang kompleks melalui PROMPT_COMMAND (yang merupakan pengaturan bash, jadi jangan diekspor):
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
Jika Anda perlu menguji apakah tmux sudah diinstal:
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
Omong-omong, ini semua harus masuk ke ~/.bashrc , bukan ~/.bash_profile (lihat Perbedaan antara .bashrc dan .bash_profile). ~/.bashrc dijalankan di setiap instance bash dan berisi kustomisasi shell seperti prompt dan alias. ~/.bash_profile dijalankan saat Anda masuk (jika Shell masuk Anda adalah bash). Anehnya, bash tidak membaca ~/.bashrc di shell login, jadi ~/.bash_profile your Anda harus berisi
case $- in *i*) . ~/.bashrc;; esac