sh(bash) 스크립트에서 bash 스크립트를 실행하는 방법은 무엇입니까?

sh(bash) 스크립트에서 bash 스크립트를 실행하는 방법은 무엇입니까?

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.shbash: 를 사용하여 실행합니다 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`

편집: 좋은 캐치, 수정됨

관련 정보