場合によっては、作業環境をクリーンアップするために単一または複数のセッションのすべてのウィンドウでTmuxコマンドを実行したい場合があります。
たとえば、次のTmuxコマンドを実行します。
# Clear screen
bind M-l send-keys -R \; clear-history \; send-keys C-l \; display "█▓░ clear"
ウィンドウオプションについて知っていますが、synchronize-panes
私が知っている限り、このオプションはすべてのセッションのすべてのウィンドウを同期するのではなく、現在のウィンドウのウィンドウのみを同期します。
# Synchronize panes (toggle option)
bind C-s setw synchronize-panes \; display "█▓░ synchronize (#{?synchronize-panes,on,off})"
単一セッションまたは複数セッションのすべてのウィンドウでTmuxコマンドを実行する方法はありますか?
答え1
ここに私が書いたスクリプトがあります。別の名前で保存tmux-sendall
(chmod +x tmux-sendall
):
#!/bin/bash
if [[ -z $1 ]]; then
current=$(tmux display -p "#S")
echo "usage: tmux-sendall SESSION [COMMAND]"
if [[ -n $current ]]; then
echo "current session: $current"
fi
exit 1
else
session="$1"
fi
if [[ -n $2 ]]; then
message="$2"
else
read -p "send cmd to session $session$ " message
if [[ -z $message ]]; then exit 1; fi
fi
function sendwindow() {
# $1=target, $2=command
tmux setw -t $1 synchronize-panes
tmux send-keys -lt "$1" "$2"
tmux send-keys -t "$1" "Enter"
tmux setw -t $1 synchronize-panes off
}
export -f sendwindow
tmux list-windows -t $session | cut -d: -f1 | xargs -I{} bash -c "sendwindow '$session:{}' '$message'"
特定のセッションのウィンドウを一覧表示し、各ウィンドウsendwindow
に対して機能を実行します。
sendwindow
他のタスクを実行するには、tmuxコマンドを使用して機能をカスタマイズできます。
たとえば、次のセッションがあるとします1
。
tmux-sendall 1 "echo hello world"