재시동 할 때 Mac 터미널에서 작업 디렉토리를 복원하는 방법


16

Mac 터미널을 다른 작업 디렉토리에 할당 된 탭이 가득한 손으로 사용합니다. 동일한 작업 디렉토리로 새 창을 열도록 구성했습니다. 그럼에도 불구하고 터미널을 종료하고 다시 시작하면 모든 탭이 다시 작성되고 이름은 창에서 마지막 출력을 표시하지만 사용자 홈 디렉토리에는 유지되며 각 탭의 최신 작업 디렉토리는 복원하지 않습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까? ~/.bash_profile?의 일부 설정으로 인해 발생할 수 있습니까 ?


이 스레드에서 원하는 것을 찾을 수 있다고 생각합니다. apple.stackexchange.com/questions/863/…
dhempler

1
그래서 이것이 즉시 지원되어야한다고 가정하는 것이 잘못입니까?
Oliver Drotbohm

답변:


15

참고로 Mac OS X Lion 10.7 이상의 이력서 기능에 대해 이야기하고 있습니다.

기본 쉘 bash를 사용하는 경우 터미널은 자동으로 작업 디렉토리를 복원합니다. 다른 셸을 사용하는 경우 /etc/bashrc작업 디렉터리를 터미널에 전달하기 위해 이스케이프 시퀀스를 보내 려면 나중에 코드를 수정하여 나중에 다시 시작하기 위해 디렉터리를 복원해야합니다. zsh를 사용하는 경우 Zsh 터미널 재개 (OS X Lion)에 대한 답변을 참조하십시오 . 여기에는 zsh에 대한 적절한 코드가 포함되어 있습니다.

사용자 정의가 ~/.bash_profile있거나 의 사용자 정의 ~/.bashrc를 수정하여 기본 동작을 취소하지 않도록해야 할 수도 /etc/bashrc있습니다. 특히 PROMPT_COMMAND각 프롬프트에서 이스케이프 시퀀스를 보내도록 환경 변수를 설정 합니다. 해당 변수를 사용자 정의하는 경우 현재 값 앞에 코드를 추가하거나 추가해야합니다. 예 :

PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"

또한 일반적으로 다음 ~/.bash_profile을 실행해야합니다 ~/.bashrc.

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

1
답장을 보내 주셔서 감사합니다.하지만 제대로 작동하지 않는 것 같습니다. 필자는 .bashrc프롬프트 명령 사용자 정의를 찾을 수 없었지만 제거했습니다 . 이제 다음을 수행하십시오. 1. 새 터미널 창을여십시오 (사용자의 홈 디렉토리에서 열립니다) 2. cd 문서 3. 터미널 종료 4. 터미널 5 열기 디렉토리 변경 출력을 표시하는 창이 다시
열리지

@OliverGierke 터미널은 너무도 확인, 로그인 쉘을 생성 ~/.bash_profile, ~/.bash_login~/.profile.
Chris 페이지

나는 후자 두 개를 가지고 있지 않으며, 전자는 이제 ~/.bashrc당신의 대답에서 당신의 제안에 따라 실행 됩니다.
Oliver Drotbohm

2
알아 냈어요, 크리스 내을 /etc/bashrc사용하여 설치 스크립트 또는 무엇에 의해 쥐게 된 것으로 보인다. 이 있었다 /etc/bashrc.orig(나는 원래 설정으로 가정) 몇 가지 추가 설정 수록된 gist.github.com/3273170을 . 그것을 /etc/bashrc다시 예상대로 작동하게 만들었습니다. 도움과 인내심에 감사드립니다!
Oliver Drotbohm

내 .bashrc에서 $ PROMPT_COMMAND를 변경하지 않으며 시스템 기본값 / etc / bashrc 만 있습니다. 다른 제안이 있으십니까?
Richard

3

Bash-It을 사용하는 경우 $PROMPT_COMMAND덮어 쓰는 문제가 발생할 수 있습니다 .

언급했듯이 OS X에서는 새 탭에서 cwd를 복원하는 데 사용됩니다. Bash는 값을 재정의하지 말고 추가해야합니다.

그러나 지금 해결 방법은 다음 줄을 추가하는 것입니다. ~/.bash_profile

source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"

자세한 정보는 이슈 트래커에서 업데이트를 확인하십시오 : https://github.com/revans/bash-it/issues/240

그리고 그것에 대한 애플 참조 https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html


1

이 답변을 발견하기 전에 csh / tcsh에 대해이 작업을 수행하는 방법에 대한 블로그 게시물 을 작성했습니다 . 다른 사람들이 그 껍질에 대한 해결책을 찾고 여기에 오면 여기 있습니다.

if ("$?TERM_PROGRAM") then
  if ("$TERM_PROGRAM" == "Apple_Terminal") then
    alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
  endif
endif

당신 .cshrc이나 .tcshrc적절하게 추가하십시오 . ssh와 같이 원격으로 로그인 할 때 오류를 피하려면 외부 if 문이 필요합니다. tcsh의 변수 확장 규칙으로 인해 별도의 문이어야합니다.

Apple의 내장 bash 지원과 마찬가지로이 솔루션은 printf공간을 이탈하는 비용만으로 외부 프로그램을 사용하지 않습니다 . 다른 특수 문자를 피해야하는 경우 좀 더 포괄적 인 솔루션을 찾으려면 조금 더 노력해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.