各タスクに対して tmux ウィンドウを起動する --tmux を使用して GNU Parallel を起動します。
すべてのウィンドウをサイズよく分散したウィンドウに結合したいです(例:タイルビュー:Cb M-5)。
私はこれを試みます:
seq 15 | parallel tmux -S /tmp/tmsF8j3K joinp -s {} -t 1
ただし、高さが均等に分配されないため、次のような結果が発生します。
create pane failed: pane too small
joinp
ing時にウィンドウに高さを均等に分配するように指示するか、すべてのウィンドウをウィンドウに接続してからタイリングするように指示する方法はありますか?たぶんどんな用途に使われますかselect-layout tiled
?
編集する
私はこれをテストプログラムとして使用します。
seq 1000 | parallel --jobs 9 --tmux sleep
目標は、tmuxに接続したときに素晴らしい3x3ウィンドウに実行されている9つのタスクを表示することです。ジョブが終了したら、次のジョブに置き換える必要があります。
私は試した:
while [ -e "$SERVER" ] ; do
top=$(tmux -S $SERVER new-window -P -n all)
tmux -S $SERVER list-panes -a | grep -v "^$top" | cut -d':' -f1-2 |
while read p ; do
tmux -S $SERVER joinp -s $p -t $top
tmux -S $SERVER select-layout tiled
done
tmux -S $SERVER kill-pane -t $top
tmux -S $SERVER select-layout tiled
sleep 1
done
しかし、依然として以下を提供します。
can't find pane X
そして、接続するとき、すべてのウィンドウを最初のウィンドウのウィンドウとして保持するわけではありません。
ベストアンサー1
ウィンドウを作成した後、ウィンドウを移動するために別のコマンド(おそらくループ内)を実行するのではなく、起動時に自分のウィンドウを移動するように作業コマンドを拡張できます。
seq 1000 |
parallel --jobs 9 --tmux tmux joinp -t :0 \; \
tmux select-layout -t :0 tiled \; \
sleep
arranging in: tiled
これにより、各ウィンドウに異なるtmuxコマンド(および対応する出力)が表示されます。これを防ぐために、ラッパースクリプトを作成できます。
#!/bin/sh
# move into the pane set
tmux joinp -t :0
tmux select-layout -t :0 tiled >/dev/null
# start the real task
sleep "$@"
その後実行
seq 1000 | parallel --tmux --jobs 9 /path/to/wrapper.sh