bash/zsh 스크립트는 bash나 zsh 모두에서 FreeBsd의 터미널에서 호출되지 않습니다.

bash/zsh 스크립트는 bash나 zsh 모두에서 FreeBsd의 터미널에서 호출되지 않습니다.

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

관련 정보