2014-07-22 175 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

相關問題