假设有一个脚本使用了某个Bash特性,比如数组。但是,假设该脚本在Ubuntu上使用sh
运行,这是一个不支持数组的shell。让我们还假设我不能控制从一开始就使用哪个shell,即。我只能用达什来开始剧本
假设Bash二进制文件的位置是已知的,并且可以安全地假设是一致的,那么是否可以检测并从Dash(或任何其他shell)切换到Bash?例如,我使用sh myscript.sh
运行以下脚本:
#!/bin/sh
# Do something here to detect Dash and switch to Bash (/bin/bash)
my_array=(yay i can use arrays now)
# ...
请注意,脚本必须使用sh myscript.sh
运行,我无法将其更新为bash myscript.sh
。
3条答案
按热度按时间xzlaal3s1#
Bash总是设置
BASH_VERSION
。你可以检查它是否被设置,然后用bash重新启动脚本,否则像这样:332nm8kg2#
不要与系统对抗:因为根据你的帖子,你知道在这个上下文中,调用将是
sh myscript.sh
-即。调用者假设你在这里有一个sh脚本-用下面的代码将它写成tiny sh 脚本:您真实的的bash代码在
myscript.bash
中,您可以在其中使用数组和其他bash好东西。如果你愿意,这种设计还允许你最终切换到其他语言(zsh,ruby,...)。
brccelvz3#
您可以使用以下命令检查脚本中当前使用的shell:
这个命令的输出应该类似于“/usr/bin/bash”。正如Jetchisel已经提到的,强制命令使用bash shell,像这样使用它:
您也可以在文件顶部使用shebang来使用特定的shell。
并使用./my_script. bash调用脚本。确保你的脚本是可执行的。