![스크립트를 실행하는 데 사용할 쉘](https://linux55.com/image/128038/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%8D%B0%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%89%98.png)
몇 가지 핵심 사항을 이해하고 싶습니다. Shebang 줄(#!/bin/bash) 없이 bash 구문으로 작성된 스크립트가 있고 기본 쉘은 tcsh입니다.
- 파일에 실행 권한을 부여하고 파일의 전체 경로를 입력하여 기본 셸(tcsh)에서 실행하면 올바르게 실행됩니다. shebang 줄을 입력하지 않고 어떻게 tcsh에서 스크립트를 올바르게 실행할 수 있습니까?
- 기본 쉘 tcsh의 동일한 파일에 대해 source 명령을 사용하여 실행하면 구문 오류가 발생합니다(shebang bash 라인을 사용했음에도 불구하고). 이유는 무엇입니까?
몇 가지 실험 후에 다음을 발견했습니다. 감사합니다. 이것이 맞는 것 같습니다. 몇 가지 실험을 하여 다음을 달성했습니다. - 소스(점 연산자는 bash에서만 별칭임) 명령을 사용하여 파일을 실행합니다. - 실행하지 않고도 실행합니다. 허가 - shebang 라인과 관계없이 현재 쉘을 이용하여 실행 - shebang 라인이 존재하고 파일 이름(전체 경로)을 입력하여 파일을 실행하는 경우(여기서 실행 권한이 필요함), shebang 라인에서 쉘을 사용하여 파일을 실행합니다. Shebang 라인이 존재하지 않고 이름으로 실행되는 경우 현재 쉘이 무엇이든 상관없이 내 경우에는 항상 bash가 사용됩니다. 왜인지는 모르겠습니다. /bin 파일에서 bash가 먼저 나오기 때문인가요? ? ? ? ? ? 나한테 확인해 줄래?
답변1
실행 가능한 스크립트에 shebang 줄이 없으면 에 의해 실행됩니다 /bin/sh
. 다음을 사용하여 실행하는 경우 source
:
$ cat s.sh
echo "shell=$shell"
echo "BASH=$BASH"
$ ./s.sh
shell=
BASH=/usr/local/bin/bash
$ tcsh
[~]% ./s.sh
shell=
BASH=/bin/sh
[~]% source s.sh
shell=/bin/tcsh
BASH: Undefined variable.