GNU/Linux >> Linux の 問題 >  >> Linux

BashスクリプトからTmuxセッションに参加しているかどうかを確認するにはどうすればよいですか?

bash_profileを保持するのが好きです gitリポジトリに入れて、シェルアクセスできるマシンにクローンします。 tmuxにいるので ほとんどの場合、私は[email protected]を持っています シェルプロンプトの従来のスポットではなく、ステータス行の文字列。

私が使用しているすべてのサイトに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

Linux
  1. bashスクリプトが同時に実行されないようにする

  2. Chrootで実行していることを確認するにはどうすればよいですか?

  3. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  1. シェルからPythonスクリプトを実行する方法

  2. Bashスクリプトで文字列を分割する方法

  3. URLからbashスクリプトを実行

  1. Bash スクリプト:セッションをログに記録するための bash スクリプトからのスクリプト コマンドの使用

  2. bash スクリプトを実行するには?

  3. bashからネットマスクを取得するには?