mv : PATH 변수를 수정하는 스크립트에서 실행할 때 찾을 수 없습니다.

mv : PATH 변수를 수정하는 스크립트에서 실행할 때 찾을 수 없습니다.

내 스크립트에 이것이 있습니다. 하지만 오류를 반환합니다. 콘솔에서 명령을 실행하면 잘 작동합니다

./script.sh[16]: mv: not found [No such file or directory]

T353에서 시작하는 일부 파일을 한 폴더에서 다른 폴더로 이동하고 싶습니다.원격 경로/tmp/이고내 작업 디렉토리야

cd $REMOTE_PATH
mv T353* $PATH #this is the line 16

make mv /tmp/T353* .일이 잘 된다면.

답변1

PATH스크립트에서 이 변수를 사용하고 있는 것 같습니다 . 이는 쉘이 실행 파일을 찾기 위해 사용하는 변수입니다. 이는 :경로를 구분된 경로 목록이 아닌 다른 경로로 변경하거나 스크립트에서 사용하는 실행 파일이 포함되지 않은 경로로 변경하면 쉘이 더 이상 유사 mv하거나 다른 표준 유틸리티를 찾지 못할 수 있음을 의미합니다.

이러한 이유로 쉘 스크립트 변수에 소문자를 사용하는 것이 더 좋습니다(취향의 문제입니다1 ) . 또는 적어도 쉘이 다양한 작업을 수행하기 위해 일부 변수를 사용한다는 것과 물론, 그렇지 않은 한 해당 변수를 수정하지 말아야 한다는 것을 아는 것이 좋습니다. , 쉘의 동작을 변경하고 싶습니다.

Bash에서 사용하는 변수는 Bash 매뉴얼의 "Shell Variables" 제목 아래에 나열되어 있습니다.

그런데 cd위의 줄은하다일하다. 이는 쉘 자체에 내장된 특수 유틸리티이기 때문입니다. 따라서 쉘은 $PATH그것이 어디에 있는지 알아내기 위해 찾을 필요가 없습니다 .

그건 그렇고, 당신은 그것이 $PATH당신의 작업 디렉토리라고 말했습니다. 쉘은 현재 작업 디렉토리를 $PWD.

참고로 변수를 큰따옴표로 묶는 습관을 들이세요. 바라보다"bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험".


1글쎄 , 대부분의 경우 POSIX 표준은대문자 변수에 대한 네임스페이스 유지환경 변수(즉, 내보낸 쉘 변수)은 쉘과 표준 유틸리티 세트에서 사용됩니다. 제가 아는 한에는 그렇지 않습니다.허용되지 않음대문자 사용내보내지 않은 쉘 변수하지만 네임스페이스를 정의하는 전체 목적은 충돌을 방지하는 것입니다. 환경 변수와 셸 변수는 스크립트에 대해 동일한 의미를 갖기 때문에 대문자 변수를 함께 사용하지 않는 것이 가장 좋습니다.

관련 정보