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