sudo를 사용하여 스크립트를 호출하면 shebang이 무시됩니다.

sudo를 사용하여 스크립트를 호출하면 shebang이 무시됩니다.

sudo로 스크립트를 호출하면 shebang이 무시되고 다른 쉘에서 스크립트가 실행됩니다. 테스트를 위해 다음을 포함하는 스크립트(test.sh)를 만들었습니다.

#/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"

먼저 스크립트를 호출합니다.sudo는 안돼:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash

그런 다음 스크립트를 호출합니다.Sudo와 함께:

$ sudo ./test.sh
BASH is:
actual shell is: /bin/dash

나는 이것을 기대하지 않았다. 이것이 정상적인 행동입니까?

참고: 저는 기본 셸이 Ubuntu(14.04)를 사용하고 있습니다./bin/sh심볼릭 링크입니다스프린트.

답변1

당신의 셔뱅은 셔뱅이 아닙니다. 이것은 앞머리가 없는 그녀 중 한 명일 뿐입니다.

#!/bin/bash  

수정 예:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ sudo ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ cat ./test.sh 
#!/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"

답변2

귀하의 예에서는 이 !문자가 생략되었습니다. 예를 들어#!/bin/bash

유효한 해시뱅 라인이 없으면 다음을 얻게 됩니다.기본 쉘,지금 바로스프린트.

관련 정보