2014-07-22 22 views
5

Próbowałem różne wariantyJak sprawdzić, czy aktualnie uruchomione Shell jest BusyBox

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

ale żaden z nich nie może dać wyjście odróżniającego. Mogę zrobić coś takiego, ale to brzydkie i hackish:

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

Uważam, że nie ma dokładny sposób, aby to zrobić. Twoje szczęście to http://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on. Odpowiedź @ Vality. Pytanie: Czy ma on działać tylko w systemach Linux? – konsolebox

+0

Muszę się poddać, przynajmniej teraz wiem, że nie ma lepszego sposobu. Tak, potrzebuję go tylko dla Linuksa, dodano odpowiedni tag. – svlasov

+0

Jeśli jest to tylko dla systemu Linux, mogę podać inną sugestię. – konsolebox

Odpowiedz

3

Innym sposobem wymagające Linux i readlink:

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

'realpath' również będzie działać. –

2

Osobiście faworyzować:

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

który jest sprawiedliwy Sprawdzić, czy używasz BusyBox powłoki.

Powoduje to, że ps generuje listę pid vs nazwy programów, a następnie znajduje nasz pid i sprawdza, czy nazwa programu zawiera busybox.

+0

Wersja ps z BusyBox wydaje się nie obsługiwać argumentów. – svlasov

+0

@svlasov Dziwne, mój zajęty box wydawał się pracować z tym plikiem, obsługuje tylko '-o' i' -T'. (Testowałem polecenie w moim własnym systemie z BusyBox v1.22.1.) Być może musisz zaktualizować? Czy twój BusyBox jest bardzo stary? – Vality

+0

Mam v1.20.2, ale nie jestem pewien, czy można zainstalować nowszą wersję. – svlasov