WSL에서 Windows exe를 확장자없이 실행
$ explorer.exe
그러면 탐색기가 시작됩니다. 그러나 반드시 확장자까지 포함해야 합니다.명령 프롬프트에서 실행할 때처럼 확장자를 생략하고 실행하는 방법입니다.
명령 프롬프트에서 확장명을 생략할 수 있는 이유
애초에 왜 Windows 명령 프롬프트와 PowerShell에서 .exe, .cmd 등의 확장자를 생략 할 수 있을까요? . 이 값은 명령 프롬프트에서 확인할 수 있으며 필자의 환경에서는
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
되었습니다.이것과 같은 일을 하면 할 수 있을 것 같습니다.
구현
Windows 측 설정
WSL과 환경 변수를 공유하려면 WSLENV라는 환경 변수를 사용합니다.
제어판 등으로 PATHEXT를 WSLENV에 추가하기만 하면 됩니다.
WSL 측 설정
명령을 찾을 수 없으면 PATHEXT에서 확장자를 검색하고 다시 검색하기 위해 command_not_found_handle을 사용합니다. 이미 정의된 경우 처리를 삽입하고 다시 정의합니다.
.bashrc
if declare -f command_not_found_handle >/dev/null 2>&1; then
eval 'command_not_found_handle() {
local ext
for ext in ${PATHEXT//;/ }; do
if which "$1$ext" >/dev/null 2>&1; then
"$1$ext" "${@:2}"
return $?
fi
done
'"$(declare -f command_not_found_handle|tail -n +2)"'
}'
else
command_not_found_handle() {
local ext
for ext in ${PATHEXT//;/ }; do
if which "$1$ext" >/dev/null 2>&1; then
"$1$ext" "${@:2}"
return $?
fi
done
printf "%s: command not found\n" "$1" 1>&2
return 127
}
fi
실행
여담이지만 NTFS는 파일 이름의 대소문자를 구분하지 않으므로 명령 이름의 대소문자가 다르더라도 실행할 수 있습니다.
결론
PATH가 다니면 보완이 효과가 있고, 그다지 의미는 없는 생각도 한다.
추가 (2020/05/25 19:53)
여러가지 만지면 짧아졌기 때문에 그것도 올려 둡니다.
.bashrc
eval 'command_not_found_handle() {
local ext
for ext in ${PATHEXT//;/ }; do
if which "$1$ext" >/dev/null 2>&1; then
"$1$ext" "${@:2}"
return $?
fi
done
'"$(declare -f command_not_found_handle|tail -n +2)"'
printf "%s: command not found\n" "$1" 1>&2
return 127
}'
참고문헌
Linux와의 Windows 상호 운용성
Reference
이 문제에 관하여(WSL에서 Windows exe를 확장자없이 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Khronos31/items/0a085a680a34cd35cff8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)