【问题标题】: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

【问题讨论】:

  • 我发现没有准确的方法可以做到这一点。你最好的运气是stackoverflow.com/questions/3327013/…。和@Vality 的回答。问题:它只意味着在 Linux 系统中运行吗?
  • 那我不得不放弃了,至少现在我知道没有更好的办法了。是的,我只在 Linux 上需要它,添加了适当的标签。
  • 如果只适用于Linux,我可以提出另一个建议。

标签: linux shell busybox


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2018-01-27
      相关资源
      最近更新 更多