tmux new-window --- セッションが終了するのを待ちますか?

tmux new-window --- セッションが終了するのを待ちますか?

私は次のことをしています(これは単なる例であり、コンマはより複雑です)。

xterm -fa "Inconsolata" -e tmux new-session -s alpha &
disown %%
tmux new-window -t alpha bash
tmux new-window -t alpha zsh 

...これをターミナルに入力すると完全に機能し、3つのウィンドウを持つtmuxセッションを持つxtermが提供されます。しかし、これをスクリプトに入れると動作は停止します。

 no server running on /tmp/tmux-1153/default
 no server running on /tmp/tmux-1153/default

エラーが発生し、tmux新しいセッションには1つのウィンドウしかありませんalpha

数回の実験の終わりに発見しました〜する追加したら

sleep 5

(または類似)disowntmux new-windowコマンド間。明らかに、xtermはこのコマンドを実行する前に設定を完了していないため、tmux new-window遅延を設定しない限り、セッションが作成される前に実行されます。

動作しますが、エレガントではありません。tmux待機セッションをalpha終了させる方法はありますか?

ベストアンサー1

これは2つの方法で行うことができます。

  1. このsleep方法を使用してください。sleep時間を短くしすぎて時々失敗することを除いて、使用に問題はないと思います。確認するには、次のようにします。

    while ! tmux has-session; do sleep 1; done
    

    または

    while ! tmux has-session -t alpha; do sleep 1; done
    
  2. 次のようなものを使用してくださいxtoolwaitバックグラウンドでXクライアント(ターミナルエミュレータ)を起動し、対応するウィンドウをマップしてから返されます。

2番目のオプション(おそらく最高のもの)を選択した場合は、&端末を起動するコマンドの最後からを削除する必要があることに注意してください。これにより、このオプションdisownも操作に不要になります。

コマンドは次のとおりです。

xtoolwait xterm -fa "Inconsolata" -e tmux new-session -s alpha
tmux new-window -t alpha bash

Unixにまだインストールされていない場合は、xtoolwaitパッケージとして提供されることがあります(長い間使用されてきました)。年齢)。必要なパッケージマネージャを使用してインストールしてください。

編集するtmux:コメントを見ると、xtoolwait端末を使用してもウィンドウマッピング後に作成するまでに時間がかかるようです。したがって、この場合は、必要なセッションが存在するsleep 1まで呼び出しを繰り返します。tmux

おすすめ記事