![쉘 스크립트 실행 정보](https://linux55.com/image/62527/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%8B%A4%ED%96%89%20%EC%A0%95%EB%B3%B4.png)
쉘 스크립트 파일이 있다고 가정해 보겠습니다 foo.sh
.
chmod + x foo.sh
실행파일로 바꿀 수 있어요 .
Kernighan-Pike: Unix 프로그래밍 환경(UP)에서는 foo
입력 후에 스크립트가 실행되어야 함을 나타냅니다. 대신 내 Ubuntu 시스템에서는 sh foo
또는 ./foo
. 나는 이것이 (UP이 작성될 당시) 존재하지 않았던 쉘의 일부 기능 때문이라고 추측합니다. 이 차이가 존재하는 이유와 그것이 왜 중요한지 누군가 나에게 알려줄 수 있다면 감사하겠습니다.
답변1
실행 파일의 이름이 중요합니다. 파일 이름이 이면 이름이
foo.sh
다른foo
실행 파일이 없으면 실행이 작동하지 않습니다foo
. Windows와 달리 Unix는 이를 수행하지 않습니다.절대적인파일 확장자.다음이 작동하는 경우:
./foo.sh
하지만 그렇지 않습니다:
foo.sh
이는 파일이 현재 디렉터리에 있고 현재 디렉터리가 PATH에 없음을 의미합니다. 보호를 위해 명령에 대한 경로를 명시적으로 제공하지 않으면 쉘은 PATH에 있는 파일에서만 명령을 찾습니다.
공백이 중요합니다. 다음이 작동할 수 있습니다:
./foo.sh
그러나 이것은 (이 질문의 첫 번째 버전에서 가져온) 확실히 작동하지 않습니다.
./ foo.sh
./
와 사이에 공백이 있으면 쉘은 현재 디렉토리를 인수로 사용하여 실행foo.sh
하려고 한다고 생각합니다 .foo.sh
오류 메시지가 생성됩니다.