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