我有一个 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`
编辑:好捕获,已修复