2014-07-22 85 views
5

我尝试了不同的变种如何检查是否当前运行的外壳是BusyBox的

echo $0 
echo $shell 
echo $SHELL 
ps -p $$ 

,但没有人能给出一个与众不同的输出。我可以做这样的事情,但它的丑陋和hackish的:

if ls --help 2>&1 | grep BusyBox; then 
    echo "it is BusyBox" 
else 
    echo "it is NOT BusyBox" 
fi 
+0

我发现有这样做没有准确的方法。你最好的运气是http://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on。而@ Vality的回答。问题:它是否只能在Linux系统中运行? – konsolebox

+0

我不得不放弃,至少现在我知道没有更好的办法。嗯,我只需要它用于Linux,添加了适当的标签。 – svlasov

+0

如果只是针对Linux,我可以给出另一个建议。 – konsolebox

回答

3

需要Linux和readlink另一种方式:

#!/bin/ash 
exe=`exec 2>/dev/null; readlink "/proc/$$/exe"` 
case "$exe" in 
*/busybox) 
    echo "It's a busybox shell." 
    ;; 
esac 
+1

'realpath'也可以。 –

2

我个人赞成:

if ps ax -o pid,comm | grep `echo $$` | grep busybox ; then 
    echo "it is BusyBox" 
fi 

这是一个公平的检查,以确保您正在运行busybox的外壳。

这可以通过让ps生成一个pid和程序名称列表,然后找到我们的pid并检查程序名是否包含busybox。

+0

ps的BusyBox版本似乎不支持参数。 – svlasov

+0

@svlasov奇怪的是,我的busybox似乎与它一起工作,它只支持'-o'和'-T'。 (我在我自己的系统上运行BusyBox v1.22.1测试了这个命令。)也许你需要更新?你的BusyBox很老吗? – Vality

+0

我有v1.20.2,但我不确定是否可以安装更新的版本。 – svlasov

相关问题