我尝试了不同的变种如何检查是否当前运行的外壳是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
我尝试了不同的变种如何检查是否当前运行的外壳是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
需要Linux和readlink
另一种方式:
#!/bin/ash
exe=`exec 2>/dev/null; readlink "/proc/$$/exe"`
case "$exe" in
*/busybox)
echo "It's a busybox shell."
;;
esac
'realpath'也可以。 –
我个人赞成:
if ps ax -o pid,comm | grep `echo $$` | grep busybox ; then
echo "it is BusyBox"
fi
这是一个公平的检查,以确保您正在运行busybox的外壳。
这可以通过让ps生成一个pid和程序名称列表,然后找到我们的pid并检查程序名是否包含busybox。
我发现有这样做没有准确的方法。你最好的运气是http://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on。而@ Vality的回答。问题:它是否只能在Linux系统中运行? – konsolebox
我不得不放弃,至少现在我知道没有更好的办法。嗯,我只需要它用于Linux,添加了适当的标签。 – svlasov
如果只是针对Linux,我可以给出另一个建议。 – konsolebox