Windows 환경 변수에 해당하는 Unix가 있는지 궁금합니다 PATHEXT
.
Windows 배경 지식이 없는 경우: 파일 접미사를 추가하면 PATHEXT
cmd.exe에 접미사를 입력하지 않고도 스크립트를 실행할 수 있습니다. 예를 들어, 내 Windows 컴퓨터에서 PATHEXT에는 접미사 가 포함되어 .pl
있으며 cmd.exe에서 Perl 스크립트를 실행하려면 접미사를 입력하기만 하면 됩니다 my-script
. 그러나 Bash에서 동일한 스크립트를 실행하려면 전체 이름을 작성해야 합니다 my-script.pl
.
나는 현재 Windows와 Unix 모두에서 작업하고 있기 때문에 Unix 시스템으로 돌아갈 때 접미사 입력을 잊어버리는 함정에 거의 항상 빠지게 됩니다.
답변1
가장 간단한 해결책은 스크립트 확장을 사용하지 않는 것입니다. 필수 사항은 아니며 컴퓨터가 아닌 사용자에게 스크립트 유형을 식별하는 데에만 사용됩니다. Windows는 확장자를 사용하여 파일 유형을 식별하지만 *nix 시스템(예: 드문 경우 제외 gzip
)은 사용하지 않습니다.
바이너리 파일은 *nix 에 .exe
확장자가 없고 단지 호출 foo
된다는 점에 유의하세요 foo.exe
. 따라서 foo.pl
실행 파일을 원하면 foo
파일을 먼저 저장하십시오.foo
또는 어떤 이유로든 확장 기능이 꼭 필요한 경우 스크립트를 저장한 디렉터리로 이동하여 다음 명령을 실행하세요.
for f in *.*; do ln -s "$f" "${f%%.*}"; done
이는 확장자를 가진 모든 파일에 대해 반복되며, 그 안의 각 파일에 대해 을 가리키는 foo.ext
이름의 링크가 생성됩니다 . 이름은 같지만 확장자가 다른 스크립트가 여러 개 있는 경우 이 작업은 실패합니다.foo
foo.ext
답변2
정말로 하고 싶다면 방법이 있다. .bashrc
홈 디렉터리 끝에 다음을 추가하고 확장자를 PATHEXT
점으로 구분된 확장자로 설정합니다 :
. (Windows 동작과 일치하도록 점을 포함하도록 변경되었습니다.) 사용에 따른 책임은 사용자 본인에게 있습니다.
if declare -f command_not_found_handle >/dev/null; then
eval "original_command_not_found_handle() $(declare -f command_not_found_handle|tail -n +2)"
fi
command_not_found_handle(){
local PATHEXT_EXPANDED i
IFS=: read -a PATHEXT_EXPANDED<<<"$PATHEXT"
for i in "${PATHEXT_EXPANDED[@]}"; do
if type "$1$i" &>/dev/null; then
"$1$i" "${@:2}"
return $?
fi
done
if declare -f original_command_not_found_handle >/dev/null; then
original_command_not_found_handle "$@"
else
return 127
fi
}
또한 다른 명령이 명령 이름으로 시작하지 않는 경우 Tab을 사용하여 명령 이름을 완성할 수 있다는 점을 기억하십시오 my-script
.
답변3
짧은: 없음
더 길다: 쉘 스크립트에는 전체 파일 이름이 필요하지만 명령에 대한 별칭을 정의하여 다양한 이름으로 참조할 수 있습니다. 예를 들어
alias my-script=my-script.pl