나는 :clear-history
거대한 스크롤 백이있는 창 을 호출 하고 싶습니다 . 그러나이 명령을 다양한 창의 모든 창으로 보내는 방법을 스크립트하고 싶습니다.
이 질문 에 의거하여 모든 창에 명령을 보내는 방법을 알고 있지만 어떤 창의 모든 창에 명령을 보내려면 어떻게해야합니까?
send-keys
그리고 synchronize-panes
tmux 맨 페이지에서 생각 나지만, 어떻게 결혼해야할지 모르겠습니다. 그러나이 작업을 수행하는 더 간단한 방법이있을 수 있습니다.
추가 관찰 :
이것에 대해 조금 생각 tmux list-panes -a
하면 현재 세션의 모든 창을 나열하는 것 같습니다. 시작하는 데 매우 유용합니다. 여기서 어디로 가나 요?
답변
여러 개의 창이있는 tmux 창에서 다음을 시도 했습니까?
Ctrl-B :
setw synchronize-panes on
clear history
답변
파티에 조금 늦었지만 하나의 명령을 보내기 위해 동기화 창을 설정하고 설정 해제하고 싶지 않았으므로 tmux 주위에 래퍼 함수를 만들고이라는 사용자 정의 함수를 추가했습니다 send-keys-all-panes
.
_tmux_send_keys_all_panes_ () {
for _pane in $(tmux list-panes -F '#P'); do
tmux send-keys -t ${_pane} "$@"
done
}
또한 tmux 명령 주위에 래퍼를 만들어이 함수를 편리하게 호출 할 수 있습니다. 래퍼와 위의 코드는 모두 여기에 있습니다 .
이를 통해 모든 창 으로 실행 tmux send-keys-all-panes <command>
하거나 tmux skap <command
보낼 <command>
수 있습니다.
tmux는 래퍼 함수 tmux_pp의 별칭입니다.
답변
2019 년 6 월 업데이트
동기화 창에 대한 고유 바인딩을 구성하는 방법에 대한 간단한 그림 .
내에 다음을 추가했습니다 tmux.conf
(주석은 전체 구성에 확실히 적용됩니다).
# synchronize all panes in a window
# don't use control S, too easily confused
# with navigation key sequences in tmux (show sessions)
unbind C-S
bind C-Y set-window-option synchronize-panes
이제 여러 창에서 명령을로 동기화하는 기능을 토글 할 수 있습니다 <C-a><C-y>
.
(예, 바인드 키를 Ctrl a로 다시 바꿨습니다).
답변
위의 답변 중 어느 것도 나를 위해 효과가 없었지만 (tmux v2.3) bash 명령 줄에서 수행되었습니다.
for _pane in $(tmux list-panes -a -F '#{pane_id}'); do \
tmux clear-history -t ${_pane} ; done
‘clear-history’이외의 tmux 명령에 대해보다 일반화 된 스크립트는 해당 요소를 매개 변수로 대체합니다 (예 : $ 1. “-t $ {_ pane}”이 각각에 적용되어야하므로 일련의 tmux 명령을 처리하기위한 스크립트를 작성하려는 경우주의하십시오.
것을 참고 -a
매개 변수가하는 tmux list-panes
모든 세션에있는 모든 창에있는 모든 창을 충당하기 위해 필요합니다. 그렇지 않으면 현재 tmux 창의 페인 만 영향을받습니다. 하나 개 이상의 TMUX 세션이 열려 만 현재 세션 내에서 창에 명령을 적용 할 경우, 교체 -a
로 -s
(그것은 TMUX man 페이지에서 모든입니다).
위의 각 답변에 대해 직접 언급 할 수있는 mod 포인트가 없으므로 다음과 같이 작동하지 않습니다.
@ shailesh-garg의 대답에서 내가 가진 문제는 동기화가 창 Ctrl-B :
외부에서 실행 되는 tmux 명령이 아니라 창 내에서 실행 된 명령에만 영향을 미친다는 것입니다 .
@kshenoy의 답변에 대한 세 가지 문제는 다음과 같습니다.
- 예를 들어, 창에서 bash 쉘이 실행 중이고 스크립트를 사용하여 “clear-history”를 보내는 경우 키 스트로크가 해당 창의 tmux 조작이 아닌 창 내로 키 스트로크를 보냅니다. bash 명령 줄에 나타납니다. 해결 방법은 “tmux clear-history”를 보내거나 “tmux”를 “$ @”앞에 추가하는 것이지만 대답에 대한 다른 문제로 인해 답변을 편집하지 않았습니다.
- 문자 그대로 줄을 바꾸지 않고 줄 바꿈 문자를 보내는 방법을 알 수 없었습니다.
- 내가 그렇게해도 “tmux clear-history”를 보내는 것은 효과가 없었습니다.
답변
내 tmux 버전은 1.9a이며 이것은 저에게 효과적입니다. 하나의 키로 충분합니다.
bind-key X set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"
답변
tmux send-keys -t <session id> <command> C-m
“세션 ID”와 “명령”을 적절히 교체하십시오.
답변
이것은 내 유틸리티 기능으로 창에 아무것도 실행되지 않을 때만 명령을 실행합니다.
#!/bin/bash
_send_bash_command_to_session() {
if [[ $# -eq 0 || "$1" = "--help" ]] ; then
echo 'Usage: _send_bash_command_to_session $session_name what ever command you want: '
return
fi
input_session="$1"
input_command="${@:2}"
for _pane in $(tmux list-panes -s -t ${input_session} -F '#{window_index}.#{pane_index}'); do
# only apply the command in bash or zsh panes.
_current_command=$(tmux display-message -p -t ${input_session}:${_pane} '#{pane_current_command}')
if [ ${_current_command} = zsh ] || [ ${_current_command} = bash ] ; then
tmux send-keys -t ${_pane} "${input_command}" Enter
fi
done
}
tmux_set_venv() {
_current_session=$(tmux display-message -p '#{session_name}')
_send_bash_command_to_session ${_current_session} workon $1
}
dev라는 세션을 대상으로하는 예제 는 vim 또는 다른 실행 파일이있는 페인에서 명령을 실행하지 않고 bash
또는에 있는 모든 페인에서 파이썬 virtualenv를 활성화합니다 zsh
.
_send_bash_command_to_session dev workon myvirtualenv
또는 기억하기 쉬운 : 현재 세션에서 수행하십시오.
tmux_set_venv myvirtualenv
이 기능으로 구성 파일 을 찾으십시오 .