Bash
如何通過 bash 腳本判斷我是否在 tmux 會話中?
我喜歡將其保存
bash_profile
在git 儲存庫中,並將其複製到我可以訪問 shell 的任何機器上。由於我tmux
大部分時間都user@host
在狀態行中有一個字元串,而不是它在 shell 提示符中的傳統位置。不過,並非我使用的所有網站都已
tmux
安裝,或者我可能並不總是使用它。我想檢測我何時不在tmux
會話中並相應地調整我的提示。到目前為止,我的半生不熟的解決方案.bash_profile
看起來像這樣:_display_host_unless_in_tmux_session() { # ??? } export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(每次檢查可能不是最好的方法,所以我願意接受有關更好方法的建議。Bash 腳本不是我的強項。)
Tmux
TMUX
在 tmux 會話中設置環境變數,並設置TERM
為screen
. 這不是一個 100% 可靠的指標(例如,您無法輕易判斷您是在screen
insidetmux
還是tmux
inside執行screen
),但在實踐中它應該足夠好。if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then PS1="@$HOSTNAME $PS1" fi
如果您需要通過
PROMPT_COMMAND
以下方式將其集成到復雜的提示集中(順便說一下,這是一個 bash 設置,因此不應導出):if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then PS1_HOSTNAME= else PS1_HOSTNAME="@$HOSTNAME" fi PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
如果您需要測試是否安裝了 tmux:
if type tmux >/dev/null 2>/dev/null; then # you can start tmux if you want fi
順便說一句,這應該全部進入
~/.bashrc
,而不是~/.bash_profile
(參見.bashrc 和 .bash_profile 之間的區別)。~/.bashrc
在每個 bash 實例中執行並包含 shell 自定義,例如提示和別名。~/.bash_profile
在您登錄時執行(如果您的登錄 shell 是 bash)。奇怪的是,bash 不會~/.bashrc
在登錄 shell 中讀取,所以你~/.bash_profile
應該包含case $- in *i*) . ~/.bashrc;; esac