tmux:すべてのウィンドウをウィンドウにマージする

tmux:すべてのウィンドウをウィンドウにマージする

各タスクに対して tmux ウィンドウを起動する --tmux を使用して GNU Parallel を起動します。

すべてのウィンドウをサイズよく分散したウィンドウに結合したいです(例:タイルビュー:Cb M-5)。

私はこれを試みます:

seq 15 | parallel tmux -S /tmp/tmsF8j3K joinp -s {} -t 1

ただし、高さが均等に分配されないため、次のような結果が発生します。

create pane failed: pane too small

joinping時にウィンドウに高さを均等に分配するように指示するか、すべてのウィンドウをウィンドウに接続してからタイリングするように指示する方法はありますか?たぶんどんな用途に使われますか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

おすすめ記事