자동으로 닫히지 않고 명령으로 WSL 터미널을 어떻게 열 수 있나요?

자동으로 닫히지 않고 명령으로 WSL 터미널을 어떻게 열 수 있나요?

저는 WSL1과 함께 Ubuntu를 실행 중이고 WSL 시작 시 다양한 명령을 실행하기 위해 Windows에서 다양한 바로 가기를 만들고 싶습니다. 예를 들어 하나는 자동으로 SSH 세션을 시작하고 다른 하나는 특정 디렉터리로 변경하는 것입니다. 시작 명령이 실행되면 평소처럼 계속 실행해야 하지만 시도한 모든 작업을 수행하면 터미널이 닫힙니다. 나는 다음과 같은 것을 시도했다

c:\windows\system32\bash.exe -c -i -s ssh ip

하지만 아무 일도 하지 않는 것 같고, 만약 그렇다면 너무 빨리 닫혀서 볼 수 없습니다.

답변1

먼저 .dll wsl.exe대신 최신(Microsoft 권장) 명령을 사용하는 것이 좋습니다 bash.exe. bash.exe여전히 사용 가능하지만 Microsoft는 이를 "대체된" "역사적 명령"이라고 부릅니다 wsl.exe. 또한 이 wsl명령은 이전 bash.exe.

첫 번째 문제는 명령줄에 구문/인용 오류가 있다는 것입니다. 따라서 읽기 전에 Windows 터미널 탭이 닫힙니다. 출력을 보려면 먼저 PowerShell 또는 CMD 프로필/탭에서 이를 실행하는 것이 가장 좋습니다.

PS> bash.exe -c -i -s ssh ip
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]
PS> bash.exe -c "ssh ip"
user@ip's password:
PS> wsl ssh ip
user@ip's password:
PS> wsl -e bash -c ssh ip
<displays usage information as above>
PS> wsl -e bash -c "ssh ip"
user@ip's password:

보시다시피, 명령 문자열을 에 전달하는 경우 bash -c따옴표로 묶어야 합니다. 그렇지 ssh않으면 bash는 ip.

wsl반면에 명령 은하다따옴표 없이 직접 호출을 허용합니다. 기본적으로 명령줄의 나머지 부분(모든 인수/플래그가 처리된 후)을 인수에 인용된 기본 셸에 전달하는 것은 충분히 똑똑합니다 -c. 위의 예를 wsl ssh ip.

다음으로 명령을 실행한 후 탭/셸을 열어 두는 방법을 알고 싶습니다. 여러 가지 방법으로 이를 수행할 수 있지만 가장 쉬운 방법은 다음과 같습니다.

  • 쉘 시작
  • 첫 번째 명령 실행
  • exec계속 실행되는 대체 쉘

경험한 대로 처음 두 가지만 수행하면 명령이 종료될 때 셸이 닫힙니다.

이는 다음과 같습니다:

wsl -e bash -c "ls; exec bash"

답변2

C:\Windows\System32\cmd.exe /k wsl /path/to/script.sh

/k 스위치를 사용하면 cmd가 종료되지 않아 출력을 읽을 수 있습니다. wsl에는 유사한 스위치가 없습니다.

관련 정보