
내 스크립트에 이것이 있습니다. 하지만 오류가 반환됩니다. 콘솔에서 명령을 실행하면 제대로 작동합니다.
./script.sh[16]: mv: not found [No such file or directory]
T353에서 시작하는 일부 파일을 한 폴더에서 다른 폴더로 이동하고 싶습니다.REMOTE_PATH/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 표준은대문자 변수의 네임스페이스를 예약합니다.환경 변수(즉, 내보낸 쉘 변수) 쉘과 표준 유틸리티 모음에서 사용됩니다. AFAIK, 그렇지 않아요불허하다대문자 사용내보내지 않은 쉘 변수하지만 네임스페이스를 정의하는 전체 목적은 충돌을 피하는 것입니다. 스크립트에 있어서 환경 변수와 쉘 변수는 동일한 의미를 갖기 때문에 대문자 변수를 모두 피하는 것이 좋습니다.