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