如何检查当前运行的 shell 是不是是 BusyBox
Posted
技术标签:
【中文标题】如何检查当前运行的 shell 是不是是 BusyBox【英文标题】:How to check if currently running shell is BusyBox如何检查当前运行的 shell 是否是 BusyBox 【发布时间】:2014-09-12 23:14:29 【问题描述】:我尝试了不同的变体
echo $0
echo $shell
echo $SHELL
ps -p $$
但它们都不能提供独特的输出。我可以做这样的事情,但它是丑陋和骇人听闻的:
if ls --help 2>&1 | grep BusyBox; then
echo "it is BusyBox"
else
echo "it is NOT BusyBox"
fi
【问题讨论】:
我发现没有准确的方法可以做到这一点。你最好的运气是***.com/questions/3327013/…。和@Vality 的回答。问题:它只意味着在 Linux 系统中运行吗? 那我不得不放弃了,至少现在我知道没有更好的办法了。是的,我只在 Linux 上需要它,添加了适当的标签。 如果只适用于Linux,我可以提出另一个建议。 【参考方案1】:另一种需要Linux和readlink
的方式:
#!/bin/ash
exe=`exec 2>/dev/null; readlink "/proc/$$/exe"`
case "$exe" in
*/busybox)
echo "It's a busybox shell."
;;
esac
【讨论】:
【参考方案2】:我个人比较喜欢:
if ps ax -o pid,comm | grep `echo $$` | grep busybox ; then
echo "it is BusyBox"
fi
这是一个公平的检查,以确保您正在运行busybox shell。
这是通过让 ps 生成一个 pid 与程序名称的列表,然后找到我们的 pid 并检查程序名称是否包含busybox。
【讨论】:
BusyBox 版本的 ps 似乎不支持参数。 @svlasov 奇怪,我的busybox似乎可以使用它,它只支持-o
和-T
。 (我已经在我自己的运行 BusyBox v1.22.1 的系统上测试了该命令。)也许您需要更新?你的 BusyBox 很旧吗?
我有 v1.20.2 但我不确定是否可以安装更新的版本。
@svlasov 您可能会使用 /bin/ps 而不是 ps 来强制它不使用内置的。然后您可以进行错误检查,因此如果 ps 不存在,它将假定为busybox。但是,您使用的是什么发行版?许多提供最新的busybox。
这是 TI 的 Sitara 板。我的 /bin/ps 是 /bin/busybox 的符号链接。碰巧我可以运行完整的 bash 或 zsh,因此依赖文件检查是不准确的。【参考方案3】:
可能不完美,但这是我检查的方式:
test -h /bin/ls # busybox or other single binary system
test -h /bin/ls && test `readlink /bin/ls` = busybox # it is busybox
【讨论】:
以上是关于如何检查当前运行的 shell 是不是是 BusyBox的主要内容,如果未能解决你的问题,请参考以下文章
linux shell出现【bad:interpreter:text file busy】