스크립트를 실행할 때 오류 메시지 '소스 : 찾을 수 없음'


34

수정 /etc/profile하고 $HOME/.profile일부 경로를 내 보내지 않는 작은 자동 설정 스크립트를 만들고 있습니다. 그런 다음 자동으로 다시로드하고 싶습니다.

나는 source이것이 그렇게 하는 것을 읽었 으므로 터미널을 시작하고 입력했다.

source /etc/profile
source ~/.profile

터미널에서 오류가 발생하지 않았습니다.

그러나이 두 명령을 Bash 스크립트에 넣으면 결과가됩니다 source: not found.

  1. #!/bin/sh지정된 경우에도 Bash가 스크립트를 실행했는지 어떻게 확인할 수 있습니까?
  2. 이 두 가지 출처가 틀림없이있을 때 찾을 수 없다고 말하는 이유는 무엇입니까?

답변:


53

/bin/sh아닙니다 bash. 로 스크립트를 실행하려면 스크립트 의 첫 번째 줄로 bash#!/bin/bash십시오.

찾을 수 source: not found없으므로 오류 가 삭제 /etc/profile되지 않습니다. source찾을 수 없으므로 삭제 되었습니다. sourceBash 내장 함수이며로 스크립트를 실행하지 않습니다 bash. 왜 찾을 수 없는지 분명합니다. #!스크립트 에서 줄을 변경하면 작동합니다.


9

1. #!/bin/sh지정된 경우에도 Bash가 스크립트를 실행하는지 어떻게 확인할 수 있습니까 (확실히 보장하지는 않습니다)?

sh쉘을 위해 작성된 스크립트 (귀하의 경우- #! / bin / sh와 #! / bin / bash?의 차이점 참조 )가 Bash에 의해 실행되도록하려면 다음 명령을 실행하십시오.

bash script_name

따라서 더 이상 해당 오류가 발생하지 않습니다.

2. 왜이 두 가지 출처가 명백히 발견 될 수 없는가?

그 소스 파일이 없다고 말하지는 않습니다. 그것은 말한다 source명령을 찾을 수 없습니다. 스크립트를 #!/bin/sh줄로 시작하기 때문에 생각대로 스크립트가 실행 sh되지 않기 때문에 이는 정상적인 현상 bash입니다. 왜 정상입니까? source명령은 Bash 내장이지만 내장은 아니기 때문 sh입니다. 에서 파일을 소싱하려면 (점) sh을 사용해야합니다 .. 예:

. /etc/profile
. ~/.profile

또 다른 방법은 혼돈그의 답변 에서 말한 #!/bin/bash것처럼 shebang 라인을 변경하는 입니다.


4

SO 질문을 참조하십시오 :

/bin/sh일반적으로 쉘을 모방하려는 다른 쉘입니다. 많은 배포판 사용 /bin/bash을 위해 sh이 소스를 지원합니다. 그러나 우분투에서는 /bin/dash소스를 지원하지 않는 것이 사용됩니다. 스크립트를 편집 할 수 없으면 스크립트를 실행하는 쉘을 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.