tmuxサーバーが実行されていないと、tmux ls出力をgrepできません。

tmuxサーバーが実行されていないと、tmux ls出力をgrepできません。

その情報で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

予想通り正常な出力です。

greptmuxサーバーが死ぬと失敗するようです。次の奇妙な点を確認してください。

> 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/nulltmux使用可能なセッションがない場合、コマンドはエラーメッセージを出力しますが、そのメッセージには興味がありません。

おすすめ記事