
나는 대본을 쓰고 있어요. 나는 이것을 정말로 알고 싶습니다. tmux 실행 파일이 나에게 이것을 말해 줄 수 있기를 바랍니다.
내가 찾은
tmux rename <newname>
현재 세션의 이름을 바꿀 수 있습니다. 하지만 자신의 이름을 가져오는 명령을 찾을 수 없습니다.
답변1
와 함께티먹스1.2 이상에서는 메시지를 stdout으로 출력하는 -p
옵션을 사용할 수 있습니다 display-message
(연결된 클라이언트에 표시하는 대신).
tmux display-message -p '#S'
#S
status-left
세션 이름으로 형식이 지정됩니다( 맨페이지의 옵션 설명 참조 ).
답변2
나는 거의 5년이 지난 후에도 이 답변 중 어느 것도 적절하지 않다는 점을 아무도 지적하지 않았다는 사실에 놀랐습니다. 현재 TTY가 호스트의 유일한 tmux 세션에 연결되어 있는 한 둘 다 잘 작동하지만 다음과 같은 경우에는 둘 다 실패합니다.
- 현재 터미널 세션이 tmux 세션의 일부가 아닙니다. 또는
- 연결된 tmux 세션이 여러 개 있습니다.
전자의 경우, 여기의 두 답변 모두 연결된 세션의 이름을 다시 보고합니다(현재 tty가 해당 세션에 의해 관리되는지 여부에 관계없이). 후자의 경우 결과가 불확실하거나 여러 답변이 나올 가능성이 높습니다.
적절한 질문은 "현재 터미널 세션이 연결된 tmux 세션의 이름은 무엇입니까?"입니다.
그가 대답하기 때문에저것질문, 실행:
for s in $(tmux list-sessions -F '#{session_name}'); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'
이는 tmux 세션 수(연결 여부)와 현재 터미널 세션이 tmux 세션의 일부인지 여부에 관계없이 작동합니다.
답변3
확장/수정됨팀 사람들의 답변
대로don_crissti의 댓글
~에이것이 grep -v
예상대로 작동하지 않는 이유는 무엇입니까?.
"$(tty)" 명령팀 사람들의 답변
| grep "$(tty)" |
해당 컨텍스트에서는 예상대로 작동하지 않습니다. 'tty가 아님' 문자열로 평가됩니다.
이를 변수로 바꾸면 이 문제가 해결됩니다.
tty=$(tty)
...
| grep "$tty" |
또한 tmux 세션이 없으면 원본 코드는 다음을 생성합니다.
"/tmp/tmux-1000/default에서 실행 중인 서버가 없습니다"에러 메시지.
추가 2>/dev/null
하면 오류 메시지를 인쇄하지 않고 코드가 실행됩니다.
수정된 코드는 다음과 같습니다.
tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'
답변4
이상적이지는 않지만 다음을 사용하여 연결된 세션의 이름을 추출할 수 있습니다 awk
.
tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'
사용자 정의 형식은 기본값보다 구문 분석하기가 조금 더 쉽습니다.