![단일 또는 다중 세션의 모든 창에서 Tmux 명령을 실행하는 방법은 무엇입니까?](https://linux55.com/image/181318/%EB%8B%A8%EC%9D%BC%20%EB%98%90%EB%8A%94%20%EB%8B%A4%EC%A4%91%20%EC%84%B8%EC%85%98%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%B0%BD%EC%97%90%EC%84%9C%20Tmux%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
때로는 작업 환경을 정리하기 위해 단일 또는 다중 세션의 모든 창에서 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"