私は次のことをしています(これは単なる例であり、コンマはより複雑です)。
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
(または類似)disown
とtmux new-window
コマンド間。明らかに、xtermはこのコマンドを実行する前に設定を完了していないため、tmux new-window
遅延を設定しない限り、セッションが作成される前に実行されます。
動作しますが、エレガントではありません。tmux
待機セッションをalpha
終了させる方法はありますか?
答え1
これは2つの方法で行うことができます。
この
sleep
方法を使用してください。sleep
時間を短くしすぎて時々失敗することを除いて、使用に問題はないと思います。確認するには、次のようにします。while ! tmux has-session; do sleep 1; done
または
while ! tmux has-session -t alpha; do sleep 1; done
次のようなものを使用してください
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