如何从 sh(bash) 脚本运行 bash 脚本?

如何从 sh(bash) 脚本运行 bash 脚本?

我有一个 sh (shebang #!/bin/sh) 脚本 ( sh.sh),它调用 bash (shebang #!/bin/bash) 子脚本:

. "some-path/bash.sh"

在 bash 脚本中,我有一个关联数组的声明:declare -A properties,因此出现错误declare: not found

很明显为什么declare找不到,因为父脚本是 sh 脚本而不是 bash。

有没有办法强制 bash 语法?

另一种方法是打开一个新的 shell,但这是有问题的,因为下脚本的目的是定义要在父脚本中使用的变量。子 shell 不应该弄乱父 shell 的变量。

父级(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`

编辑:好捕获,已修复

相关内容