쉘 명령을 사용하여 tmux 작업 디렉토리를 변경하는 방법

쉘 명령을 사용하여 tmux 작업 디렉토리를 변경하는 방법

나는쉘 명령실행 시 작업 디렉터리 설정현재 tmux 세션도착하다현재 작업 디렉토리.

attach-session -t . -c /path/to/directory세션 작업 디렉터리를 설정하는 방법에 대한 많은 답변이 있는 질문에 대한 답변은 tmux 명령 프롬프트에서 실행하는 것 같습니다 . 내 (기본) 구성에서는 C-b : attach-session -t . -c /path/to/directory.

나는 tmux 명령 프롬프트와 수동으로 상호 작용하고 싶지 않습니다. 주로 대상 디렉터리를 입력하거나 복사하여 붙여넣는 작업을 처리하고 싶지 않기 때문에 간단한 명령을 원합니다. 나는 쉘 프롬프트에서 tmux에 명령을 보낼 수 있다는 것을 알고 있습니다. 예를 들어 상태 표시줄에 메시지를 표시하는 tmux display-message MESSAGE대신 쉘에서 명령을 실행할 수 있습니다. C-b : display-message HELLO그러나 실행하면 tmux attach-session -t (tmux display-message -p '#S') -c (pwd)"세션을 주의 깊게 중첩해야 합니다. $TMUX를 설정 해제하여 강제로 실행해야 합니다."라는 오류가 발생합니다. 물론, 나는 tmux 세션을 중첩하고 싶지 않고 단지 tmux의 디렉토리를 변경하고 싶습니다.현재의회의.

나는 또한 tmux send-keysand 를 사용해 보았지만 tmux-send-prefix이는 tmux에 직접적으로 키 시퀀스를 전달하는 대신 기본 tty(쉘이 이에 응답함)에 키 시퀀스를 전달하는 것 같습니다.

저는 Fish 쉘을 사용하고 있지만 솔루션이 쉘 스크립트에 적합하다고 가정하므로 모든 언어의 솔루션에 만족합니다.

답변1

내 생각에 한 가지 해결책은 다음과 같습니다.

tmux bind n new-window -c "/the/dir/you/want"

("n"을 새 창을 만들 때 사용된 실제 문자로 바꾸세요.)

내가 올바르게 이해했다면 모든 새 창이 Runtime my-script /some/dir과 Runtime 사이의 my-script /some/other/dir디렉토리에서 열리기를 원할 것입니다 /some/dir.

제가 제안하는 명령은 여러분이 가장 많이 사용하고 있는 "새 창" 바인딩만 무시합니다. 새 창이 필요할 때마다 수동으로 실행 tmux new-window하지만 작동하지 않습니다.

(편집 1) 그러나 tmux new-window스크립트에서 실행하면 비용이 많이 들지 않습니다 tmux new-window -c "${the_dir:-(pwd)}".

답변2

tmux까지버전 3.1작업 디렉터리는 명령을 결합하여 tmux 세션 자체의 셸에서 프로그래밍 방식으로 변경할 수 있습니다.명령 프롬프트그리고추가 세션(아니면 그냥첨부된/존재하다). 다음 bash 세션 예를 참조하세요.

$ pwd
/tmp/test
$ tmux new-session -t test
$ cd /home
$ tmux command-prompt -I "$PWD" -p "New session dir:" "attach -c%1"
$ tmux new-window
$ pwd
/home

참고: tmux 명령 프롬프트는 제공된 템플릿으로 현재 클라이언트 명령 프롬프트를 채우며 tmux 명령 프롬프트 줄을 실행하려면 확인(ENTER)이 필요합니다.

안타깝게도버전 3.2이러한 명령은 tmux 세션 자체에서 실행되면 중단되지만 세션 외부에서 실행되면 계속 작동합니다. 예를 들어, 이전 터미널 세션 발췌에 따라 버전 3.2에서 작업 디렉터리를 변경하려고 하면 다음 오류가 생성됩니다.

$ tmux command-prompt -I "$PWD" -p "New session dir:" "attach -c%1"
sessions should be nested with care, unset $TMUX to force

버전 3.2의 모든 변경 사항에도 불구하고 tmux 버전 3.1의 경우처럼 다음 중 하나를 사용하여 작업 디렉터리를 변경할 수 있습니다.

  1. 세션에 연결된 경우
  2. 세션에서 tmux keybind 명령을 사용하는 경우
  3. 세션에서 명령 프롬프트를 수동으로 트리거하는 경우

비록 이것이 내가 보관하고 싶은 것은 아니지만 나는 완성 질문에 답하기 위해 여전히 이러한 대안을 여기에 언급하고 있습니다. 그러나 tmux 3.2에서는 쉘 명령만 사용하여 tmux 작업 디렉토리를 변경하는 솔루션을 찾지 못했습니다!

[1] 새 세션에 연결하여 다음 터미널 세션 예를 참조하세요.

$ pwd
/tmp/test
$ tmux new-session -t test
$ tmux detach-client
$ tmux attach -c /home -t test
$ tmux new-window
$ pwd
/home

[2] 대신 tmux 구성에 다음 예를 사용할 수 있습니다($HOME/tmux.conf) 단축키 Alt+c를 사용하여 작업 디렉토리를 현재 창의 현재 작업 디렉토리로 변경합니다.

bind M-c attach-session -c "#{pane_current_path}"

[3] tmux 명령 프롬프트를 수동으로 사용하려면 Esc 키 바인딩(기본값은 C-b) 뒤에 :attach -c /new/working/dir/path을 입력하면 됩니다 ENTER.

관련 정보