단일 또는 다중 세션의 모든 창에서 Tmux 명령을 실행하는 방법은 무엇입니까?

단일 또는 다중 세션의 모든 창에서 Tmux 명령을 실행하는 방법은 무엇입니까?

때로는 작업 환경을 정리하기 위해 단일 또는 다중 세션의 모든 창에서 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"

관련 정보