各タスクに対して 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
答え2
あなたのselect-layout
提案は正確ですが、新しいウィンドウが作成されるたびに呼び出す必要があります。すべてのウィンドウはすぐに再構成されるため(私のテストでは95x58端末)、次の分割に十分なスペースがあります。
このcan't join a pane to its own window
メッセージを回避するには、追加のウィンドウを作成してから、既存のすべてのウィンドウをそのウィンドウに移動し、最後にリンクされたウィンドウを終了できます。 parallel
正しいツールではありません。どのウィンドウが実行されているかを問い合せ、各ウィンドウをループに移動することをお勧めします。
top=$(tmux -S $SERVER new-window -P -n all)
tmux -S $SERVER list-panes -a | grep -v "^$top" | grep -o "%[0-9]\+\>" |
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
または、各新しいウィンドウを1行の高さにし、joinp -l 1
端末のサイズに応じてselect-layout
最後のウィンドウだけで十分です。
ただし、parallel
既存のtmux
ウィンドウ/ウィンドウは追跡されず、各タスクは新しいウィンドウで開始されます。状況によっては、古いものが消えることがあります。終了時に未変更のまま環境。したがって、一定時間が経過すると、元のウィンドウ(各タスクがウィンドウに表示されます)に実行中のタスクは含まれず、すべての新しいタスクが独自のウィンドウに再表示されます。すべてのウィンドウ(および前のウィンドウ)を単一のウィンドウに戻すには、スクリプトを再実行する必要があります。