bashスクリプトを使ってtmuxセッションにいるかどうかはどうすればわかりますか?

bashスクリプトを使ってtmuxセッションにいるかどうかはどうすればわかりますか?

bash_profile私を入れるのが好きです。Gitリポジトリシェルを介してアクセスできるすべてのコンピュータに複製します。tmuxほとんどの場合、user@hostシェルプロンプトの従来の場所ではなくステータス行に文字列を表示するためです。

ただし、私が使用しているすべてのサイトにこのtmuxプログラムがインストールされているわけではなく、常に使用されていない可能性があります。tmuxセッションに参加していない時間を検出し、それに応じてプロンプトを調整したいと思います。これまでのところ、私の半分焼いたソリューションは.bash_profile次のとおりです。

_display_host_unless_in_tmux_session() {
    # ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'

(毎回確認するのが最善のアプローチではないかもしれないので、より良い方法の提案を歓迎します。Bashスクリプトは私の強みではありません。)

ベストアンサー1

TMUXtmuxはtmuxセッション内で環境変数を設定し、にTERM設定されます。これは100%信頼できる指標ではありませんが(たとえば、内部で実行されているのか外部で実行されているのかscreen簡単にはわかりません)、実際には十分です。screentmuxtmuxscreen

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 インスタンスで実行され、プロンプトやエイリアスなどのシェルのカスタマイズが含まれます。~/.bash_profileログイン時に実行します(ログインシェルがbashの場合)。奇妙なことに、bashは~/.bashrcログインシェルを読み取らないので、以下~/.bash_profileを含める必要があります。

case $- in *i*) . ~/.bashrc;; esac

おすすめ記事