Post

[OS/Windows] Windows 탐색기에서 해당 경로로 WSL Ubuntu 터미널 열기

Windows 탐색기에서 우클릭 -> "터미널 열기"를 하면, PowerShell은 해당 경로로 자동으로 이동하지만, WSL Ubuntu는 항상 홈 디렉토리에서 열리는 문제 해결.

[OS/Windows] Windows 탐색기에서 해당 경로로 WSL Ubuntu 터미널 열기

Windows 탐색기에서 우클릭 → “터미널에서 열기” 를 하면 PowerShell은 해당 경로로 자동 이동하지만, WSL Ubuntu는 항상 홈 디렉토리(~)에서 열리는 문제를 해결한다.


🔍 원인

PowerShell은 Windows 경로를 그대로 사용하므로 탐색기 경로를 바로 상속받는다.

반면 WSL은 Linux 환경이라 source: "Microsoft.WSL" 설정만으로는 탐색기 경로를 받지 못하고 기본적으로 홈 디렉토리(~)에서 시작한다.

commandline: "wsl.exe -d Ubuntu-24.04"를 명시하면 Windows Terminal의 현재 경로를 WSL이 자동으로 /mnt/c/... 형식으로 변환하여 시작 경로로 사용한다. 단, 터미널을 그냥 열면 Windows Terminal의 기본 경로인 C:\Windows\System32를 상속받으므로 이를 홈으로 돌려보내는 처리가 추가로 필요하다.


✅ 해결 방법

1️⃣ Windows Terminal settings.json 수정

profiles.list 에서 Ubuntu 프로필을 찾아 "commandline" 항목을 추가한다.

1
2
3
4
5
6
7
8
{
    "colorScheme": "Campbell",
    "commandline": "wsl.exe -d Ubuntu-24.04",
    "guid": "{본인의 guid}",
    "hidden": false,
    "name": "Ubuntu-24.04",
    "source": "Microsoft.WSL"
}

guid는 본인 환경마다 다르다. 기존 Ubuntu 프로필에 "commandline" 한 줄만 추가하면 된다.

2️⃣ .zshrc에 경로 변환 코드 추가

1
2
3
4
# 그냥 열었을 때 System32 등 Windows 시스템 경로면 홈으로 이동
case "$PWD" in
    /mnt/c/Windows*|/mnt/c/windows*) cd ~ ;;
esac

⚙️ 동작 원리

항목설명
wsl.exe -d Ubuntu-24.04 (settings.json)Windows Terminal의 현재 디렉토리를 WSL이 자동으로 /mnt/c/...로 변환하여 시작 경로로 사용한다.
case "$PWD"쉘 시작 시점의 $PWD를 확인. /mnt/c/Windows*이면 Windows 시스템 경로이므로 ~로 이동한다.

탐색기에서 C:\Users\foo\Documents 경로에서 열면, WSL은 /mnt/c/Users/foo/Documents로 이동한다. 그냥 터미널을 열면 기본 경로인 C:\Windows\System32/mnt/c/Windows/System32가 되고, case문이 ~로 보낸다.


❌ 실패했던 방법

powershell.exe pwd 방식

처음에는 powershell.exe -Command "pwd" 로 탐색기 경로를 가져오려 했다.

1
2
3
4
5
6
7
if [[ -n "$WT_SESSION" && -n "$WT_PROFILE_ID" ]]; then
    WIN_PATH=$(powershell.exe -NoProfile -Command "pwd" 2>/dev/null | tr -d '\r')
    if [[ -n "$WIN_PATH" ]]; then
        WSL_PATH=$(wslpath "$WIN_PATH" 2>/dev/null)
        [[ -d "$WSL_PATH" ]] && cd "$WSL_PATH"
    fi
fi

하지만 powershell.exe -Command "pwd" 는 Windows 탐색기의 경로가 아닌, 현재 WSL의 경로를 UNC 형식으로 반환하기 때문에 의미가 없다.

1
2
# 실제 출력 예시
Microsoft.PowerShell.Core\FileSystem::\\wsl.localhost\Ubuntu-24.04\home\username

.zshrc가 실행되는 시점에는 이미 WSL이 ~에서 시작한 후이므로, PowerShell도 WSL 홈 경로를 그대로 돌려줄 뿐이다.

/proc/$PPID/cwd 방식

부모 프로세스의 cwd를 읽어 경로를 얻으려 했으나, WSL2에서 Windows 프로세스(Windows Terminal)는 /proc에 항목이 없어 readlink /proc/$PPID/cwd가 빈 값을 반환한다. 애초에 동작하지 않는 방법이다.

사실 settings.jsoncommandline: "wsl.exe -d Ubuntu-24.04"를 설정하면 WSL이 Windows Terminal의 현재 경로를 /mnt/c/...로 자동 변환하여 시작하므로, $PWD만 확인하면 충분하다.


🖥️ 환경

  • Windows 11
  • Windows Terminal
  • WSL2 Ubuntu 24.04
  • Zsh + Oh My Zsh
This post is copyrighted by the author. All rights reserved.