私は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スクリプトは私の得意ではありません。)
Tmuxは、tmuxセッションでTMUX
環境変数を設定し、TERM
をscreen
に設定します。これは100%信頼できるインジケーターではありません(たとえば、screen
内でtmux
を実行しているか、tmux
内で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インスタンスで実行され、プロンプトやエイリアスなどのシェルのカスタマイズが含まれています。 ~/.bash_profile
は、ログイン時に実行されます(ログインシェルがbashの場合)。奇妙なことに、bashはログインシェルで~/.bashrc
を読み取らないため、~/.bash_profile
には
case $- in *i*) . ~/.bashrc;; esac
さまざまな方法を試した後、これが私にとって最終的に機能したものです。
if [[ "$TERM" =~ "screen".* ]]; then
echo "We are in TMUX!"
else
echo "We are not in TMUX :/ Let's get in!"
# Launches tmux in a session called 'base'.
tmux attach -t base || tmux new -s base
fi
このコードスニペットでは、TMUX環境にないかどうかを確認して起動します。このコードスニペットを.bashrc
ファイル。ターミナルを開くと、TMUXが自動的に実行されます。 PS:Ubuntu Shellでテスト済み。
以前の回答と同様に、${TERM}
変数はコーナーケースにつながる可能性があり、tmux
は自身のライフの中で環境変数を設定します:
$ env | grep -i tmux TMUX =/tmp/tmux-1000/default、4199,5 TMUX_PANE =%9 TMUX_PLUGIN_MANAGER_PATH =/home/imil/.tmux/plugins /
tmux
環境内にいるかどうかを確認するには、次のことを確認します。
$ [ -z "${TMUX}" ] && echo "not in tmux"