GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Mengenalinya Jika Saya Dalam Sesi Tmux Dari Skrip Bash?

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

Linux
  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bagaimana Mengenalinya Versi Os X Saya Dari Baris Perintah?

  3. Bash + Bagaimana Cara Keluar Dari Skrip Sekunder Dan Dari Skrip Utama Pada Kedua Kalinya?

  1. Cara menjalankan skrip Python dari shell

  2. Bash Script - Cara Membaca Input Pengguna

  3. Bagaimana cara meneruskan parameter ke skrip Bash?

  1. Mencegah skrip bash berjalan secara bersamaan

  2. Jalankan skrip bash dari URL

  3. Bagaimana cara mendapatkan netmask dari bash?