その情報でzshプロンプトを更新できるように、tmuxサーバーが実行されていることを確認する方法を見つけたいと思います。
tmux サーバーが有効な場合
> tmux ls
0: 1 windows (created Sat Jul 10 13:47:36 2021) (attached)
では、出力をgrepできますか?
グレブ出力:
> tmux ls | grep -i "windows"
0: 1 windows (created Sat Jul 10 13:47:36 2021)
windows
(私の場合)色red
または端末の色の場合、コマンドは機能します。
この単語はwindows
常に出力に表示されるため、この単語を選択しました。tmux ls
さて、サーバーがオフラインであることを確認してください。
tmuxサーバーをシャットダウンした後:
tmux kill-server
次に、次のコマンドを使用してサーバーがアクティブであることを確認します。tmux ls
> tmux ls
no server running on /tmp/tmux-1000/default
予想通り正常な出力です。
grep
tmuxサーバーが死ぬと失敗するようです。次の奇妙な点を確認してください。
> tmux ls | grep -i "windows"
no server running on /tmp/tmux-1000/default
exit code
コマンド:
> echo $?
1
failed
出力を取得するgrepを意味します。
別のテストケースでは、奇妙な動作を示しています。
> tmux ls > file.txt
no server running on /tmp/tmux-1000/default
何を実行しても、常にno server ... bla bla
画面に印刷されます。
ファイルをキャプチャするとき:
> cat file.txt
空
その情報でzshプロンプトを更新できるようにtmuxサーバーが実行されていることを確認するにはどうすればよいですか?
注:$TMUX
セッションにいるかどうかは知りたくありませんが、すでにセッションにいるかどうかは知りたくないので、変数は私には役に立ちません。これは言葉ではありません。セッションに接続しているかどうかにかかわらず、サーバーがあるかどうかをalive
知りたいです。dead
追加(zsh ユーザーのみ)
tmux サーバーの状態を zsh プロンプトに入れるには、次のような結果を得ます。
これを得るには、.zshrc
function update_prompt_and_venv () {
if tmux ls &> /dev/null; then
tmux_server="%{$terminfo[bold]$fg[black]%}(%{$terminfo[bold]$fg[green]%}tmux%{$terminfo[bold]$fg[black]%}) "
fi
PROMPT="
$tmux_server ... $your_cwd
> "
}
precmd_functions+=(update_prompt_and_venv)
コンテンツ:
- 端末でEnterキーを押すたびに呼び出される関数
- tmux サーバーの状態に応じた変数
- 機能アップデートのヒント
precmd_functions
各入力コマンドの前に呼び出される関数を追加します。
サーバーのシャットダウン後にEnterキーを押すと、更新内容がすぐに表示されます。
ベストアンサー1
あなたの混乱はtmux
他のすべてのユーティリティと同様に、エラーメッセージやその他の診断メッセージ標準エラーストリーム以下ではなく標準出力ストリーム。リダイレクトを使用すると、>
エラーメッセージではなく標準出力ストリームのみがリダイレクトされます。同様に、コマンド出力をパイプすると、エラーメッセージではなく標準出力ストリームのみがパイプされます。これは意図的に設計されています。
しかし、ここではgrep
何もする必要はなく、代わりにtmux
終了状態自体を調査することに頼ることができます。
セッションが存在するか(またはセッションが存在するかどうかを知らせるために存在するhas-session
サブコマンドがあります)。tmux
特定セッションが存在する):
has-session
[-t target-session
]
(エイリアス:has
)指定されたセッションが存在しない場合、エラーが報告され、1で終了します。存在する場合は0で終了します。
これは、以下が利用可能であることを意味します。
if tmux has-session 2>/dev/null; then
echo session exists
else
echo no sessions
fi
これは特定の文字列の存在を調べることに依存し、tmux has-session
コマンド出力を解析する必要はありません。
/dev/null
我々はそれを破棄するために使用するためにエラーストリームをリダイレクトします2>/dev/null
。tmux
使用可能なセッションがない場合、コマンドはエラーメッセージを出力しますが、そのメッセージには興味がありません。