%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20bash%20%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%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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`
편집: 좋은 캐치, 수정됨