1. 문제.
Windows Terminal에서 Git Bash를 쓰다 보면, 탭 바의 + 버튼으로 새 탭을 열 때마다 홈 디렉터리로 돌아간다. 지금 작업하던 경로를 그대로 이어받아 새 탭을 열고 싶다.
2. 새 탭과 탭 복제.
+ 버튼(새 탭)은 항상 프로필의 startingDirectory 값으로 열리므로 현재 경로를 무시한다. 반면 탭 복제(Duplicate Tab)는 현재 셸이 있는 경로를 물려받는다. 즉 "현재 경로에서 열기"의 정체는 새 탭이 아니라 탭 복제.
3. Git Bash가 자기 경로를 알리게 하기.
Git Bash는 기본적으로 자기 현재 위치를 터미널에 보고하지 않는다. 셸이 디렉터리를 옮길 때마다 그 경로를 이스케이프 신호(OSC)로 터미널에 알려주도록 PROMPT_COMMAND를 설정. Git Bash를 열고 아래 한 줄을 ~/.bashrc에 추가한다.
echo 'export PROMPT_COMMAND='\''printf "\e]9;9;%s\e\\" "$(cygpath -w "$PWD")"'\''' >> ~/.bashrc
cygpath -w는 Git Bash식 경로(/d/foo)를 Windows식 경로(D:\foo)로 바꿔 넘겨주는 역할이고, \e]9;9;...\e\\ 가 Windows Terminal이 알아듣는 "현재 디렉터리는 여기다"라는 신호.
5. 적용과 확인.
추가한 설정을 지금 세션에 바로 반영한다.
source ~/.bashrc
제대로 들어갔는지는 cat으로 확인.
cat ~/.bashrc
# ...
# export PROMPT_COMMAND='printf "\e]9;9;%s\e\\" "$(cygpath -w "$PWD")"'
6. 사용.
이제 Git Bash에서 원하는 폴더로 이동한 뒤, 탭 바를 우클릭하고 "탭 복제"를 고르면 그 경로 그대로 새 탭이 열린다. 단축키 Ctrl + Shift + D가 기본으로 탭 복제에 걸려있다.
7. 신호가 안 먹힐 때.
\e]9;9; 방식은 Windows Terminal의 확장 신호라 버전에 따라 안 먹을 수 있다. 그럴 땐 표준인 OSC 7 방식으로 바꾼다. ~/.bashrc의 그 줄을 아래로 교체하면 된다.
export PROMPT_COMMAND='printf "\e]7;file://%s%s\e\\" "$HOSTNAME" "$(cygpath -w "$PWD" | sed "s|\\\\|/|g")"'
여기서는 경로의 역슬래시(\)를 sed로 슬래시(/)로 바꿔 file:// URL 형태로 넘긴다. 교체 후 다시 source ~/.bashrc로 적용하고 탭 복제로 확인한다.