bash(shebang) 첨자를 호출하는 sh(shebang #!/bin/sh
) 스크립트( ) 가 있습니다 .sh.sh
#!/bin/bash
. "some-path/bash.sh"
Bash 스크립트에는 연관 배열 선언이 있으므로 declare -A properties
오류가 발생합니다 declare: not found
.
declare
상위 스크립트가 bash가 아닌 sh 스크립트이기 때문에 찾을 수 없는 이유는 분명합니다 .
bash 구문을 강제로 적용하는 방법이 있나요?
또 다른 방법은 새로운 쉘을 여는 방법인데, 이는 하위 스크립트의 목적이 상위 스크립트에서 사용할 변수를 정의하는 것이기 때문에 문제가 된다. 하위 쉘은 상위 쉘의 변수를 망쳐서는 안 됩니다.
상위(sh.sh):
#!/bin/sh
. "some-path/bash.sh"
하위(bash.sh):
#!/bin/bash
declare -A properties
내가 시도하고 있는 사용법:
./sh.sh
답변1
스크립트( source script
또는 . script
)를 가져오지 마세요.
대신 정상적으로 실행하세요 script
.
답변2
상위 스크립트를 있는 그대로 실행하는 대신 ./sh.sh
bash: 를 사용하여 실행합니다 bash sh.sh
. 이미 작업 중입니다.
숨겨진 가정이 있습니다. sh는 bash의 하위 집합입니다. 올바른지 확실하지 않지만 작동합니다.
답변3
Ubuntu와의 호환성을 위해 bash에서 옵션을 사용하여 스크립트를 호출하고 동일한 종료 코드를 반환하는 이것을 작성했습니다.
#!/bin/bash
if [ `readlink /proc/$$/exe` != "/bin/bash" ];then
bash "$0" "$@"
exit $?
fi
echo "Shell: "`readlink /proc/$$/exe`
편집: 좋은 캐치, 수정됨