コマンドの出力に応じてtmuxステータスに文字列を表示する

コマンドの出力に応じてtmuxステータスに文字列を表示する

プログラムが実行中の場合、プログラムの名前 (実際の名前ではなく文字列) が tmux ステータス バーに表示されるようにします。

私の持っているものは次のとおりですset -g status-right:

#{?#{!=:#(getPid p),0},program,}

どこ:

  • #(getPid p)実行中のスクリプトです。プログラムが実行されていない場合は 0 を返し、それ以外の場合は 0 (PID または wc -l) を返します。
  • #{!=:#(getPid p),program,}前のステップの結果に応じて1または0を返す必要があります
  • #{?#{!=:#(getPid p),0},program,}前のステップで1が返された場合は「program」と出力します。

しかし、最初のステップだけでは1または0を印刷することすらできません#{!=:#(getPid p),0}。これがサポートされているかどうかはわかりません。#{}条件文ではフラグのみがサポートされているのかもしれません。#()

編集

どちらがよりシンプルであるかはわかりません#(getPid p | awk '$0 != 0 {print \"program\"}')が、それでもダメです。

編集

コマンドラインでも機能する別のアプローチ: if [ $(getPid b) != 0 ]; then echo program; fi、ステータス バーには何も表示されません。

編集

スクリプトにプログラム名をエコーさせることにしました。必要なのは だけです#(getPid p)が、それでもうまくいきません。問題はおそらく他の場所にあると思います。完全な行は次のとおりです。

set -g status-right "#(getName p) |#[fg=colour239,bg=colour236,nobold,nounderscore,noitalics]#[fg=colour253,bg=colour239] %Y-%m-%d | %H:%M #[fg=colour103,bg=colour239,nobold,nounderscore,noitalics]#[fg=colour236,bg=colour103]"

答え1

わかりました。代わりに私のgetNameスクリプトが必要ですecho -nが、もちろん更新の問題もあります。

関連情報