FreeBsd 11에 스크립트가 있습니다
% cat my_script.sh
#!/usr/local/bin/zsh
# [........]
여기에는 다음과 같은 속성이 있습니다 x
.
-rwxr-xr-- 1 root wheel 669 Jun 14 02:45 my_script.sh
내 쉘은 입니다 zsh
. 실행하려고 하면 오류가 발생합니다. 이것은 내가 부르는 방식과 관련이 있습니다.
% sudo ./my_script.sh var1
sudo: ./my_script.sh: command not found
% sudo my_script.sh var1
sudo: my_script.sh: command not found
% sudo source my_script.sh var1
sudo: source: command not found
뭐가 문제 야?
고쳐 쓰다:
쉘을 bash로 변경하고 재부팅하고 #!
bash로 변경했으며 이제 다음과 같은 결과를 얻었습니다.
$ sudo ./my_script.sh test9
sudo: ./my_script.sh: command not found
답변1
% sudo ./my_script.sh var1 sudo: ./my_script.sh: command not found
이 메시지는 파일이 ./my_script.sh
존재하지 않음을 나타냅니다.해당 로더가 존재하지 않습니다.. 스크립트의 경우 로더는 다음에 언급된 실행 파일입니다.셰르본 라인.
/usr/local/bin/zsh
존재하는지, 깨진 심볼릭 링크가 아닌지 확인하세요 .
파일에 실제로 #!/usr/local/bin/zsh
첫 번째 줄이 포함되어 있고 #!/usr/local/bin/zsh
중간 뒤나 중간에 공백이나 기타 보이지 않는 문자가 포함되어 있지 않은지 확인하세요. 특별한 관심이 지불됩니다입력하다물건을 파괴하는 보이지 않는 캐릭터 중 하나입니다. Windows에서 스크립트를 생성(또는 편집)하는 경우 CR이 발생합니다. Windows에서 스크립트를 편집하는 경우 줄 끝을 "LF", "Unix", "Linux" 또는 임의 이름으로 설정하여 저장해야 합니다. 편집자를 위해.
% sudo my_script.sh var1 sudo: my_script.sh: command not found
이것이 작동하지 않는 이유는 간단합니다 myscript.sh
.명령 검색 경로.
% sudo source my_script.sh var1 sudo: source: command not found
이것이 작동하지 않는 이유는 간단합니다. source
내장 셸이기 때문에 실행 파일이 아닙니다. (실행 파일이 되는 것은 그 목적이 일부 쉘 코드를 실행하는 것이기 때문에 의미가 없습니다.현재 쉘에서--쉘만이 이 작업을 수행할 수 있습니다. )
현재 실행 중인 셸은 이 세 가지 명령과 아무 관련이 없습니다.
답변2
문제는 sudo
현재 디렉토리도 PATH
.
따라서 스크립트를 찾을 수 있도록 전체 경로를 지정하십시오.
sudo /path/to/my_script.sh
또한 파일이 아닌 쉘 내장 sudo source
이므로 동일한 오류가 발생합니다 . source
쉘을 사용하는 대신 파일이 필요한 sudo
실행 인수를 사용하십시오 .execev
자세한 내용은 man sudo
(특히프로세스 모델부분합-이자형그리고-에스옵션), 구성 옵션은 man sudoers
및 를 참조하세요 /etc/sudoers
.
지정된 스크립트 경로를 사용하는 추가 옵션은 sudo
다음을 참조하세요.https://stackoverflow.com/questions/12996397/command-not-found-when-using-sudo