我正在寻找一种简单可靠的方法来从脚本或源文件(而不是从命令行)中获取当前 shell 的名称。我本来希望这样做,$(basename "$SHELL")但是如果我的登录 shell 是zsh并且我在 some_script.sh 中有以下代码
this_shell=$( basename "$SHELL" )
echo "The Shell is $this_shell"
echo "The Shell is $0"
Run Code Online (Sandbox Code Playgroud)
我用 运行它bash some_script.sh,它仍然列出zsh而不是bash即使使用的解释器是/bin/bash. 我不确定为什么外壳设计者选择显示默认外壳而不是当前外壳,但这似乎是我们所坚持的。
还有一些其他稍微相似的问题(这里和这里),但他们的答案在很多方面都不够。
echo $0. 如上面的脚本所示,这失败了。(是的,它可以在交互式 shell 命令行中使用,但是您为什么不知道您使用的是什么 shell?) ps -p $$,但缺乏跨平台、跨外壳兼容的 sed/awk 命令来通过管道传递它以获取外壳名称并忽略随之而来的其他信息为骑行。$BASH_VERSION和 …我试图了解该ls命令的工作原理,并且我认为有一个 shell 脚本定义ls了文件系统中的某处。这个正确吗?如果是这样,我在哪里可以找到它?