2014-07-22 20 views
5

ho provato diverse variantiCome controllare se in esecuzione shell è BusyBox

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

ma nessuno di loro può dare un'uscita distintivo. Posso fare qualcosa di simile, ma è brutto e hacker:

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

trovo che non c'è modo preciso per farlo. La tua migliore fortuna è http://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on. E la risposta di @ Vality. Domanda: è pensato solo per funzionare in sistemi Linux? – konsolebox

+0

Allora devo arrendermi, almeno ora so che non esiste un modo migliore. Sì, ne ho bisogno solo per Linux, tag appropriato aggiunto. – svlasov

+0

Se è solo per Linux, posso dare un altro suggerimento. – konsolebox

risposta

3

Un altro modo che richiede Linux e readlink:

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

'realpath' funzionerà anche. –

2

Personalmente prediligo:

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

Che è un assegno giusto per controllare che sia in esecuzione di shell busybox.

Questo funziona avendo ps generare un elenco di pids vs nomi di programmi quindi trovare il nostro pid e verificare se il nome del programma contiene busybox.

+0

La versione BusyBox di ps non sembra supportare gli argomenti. – svlasov

+0

@svlasov Strano, il mio busybox sembrava funzionare con questo file, supporta solo '-o' e' -T'. (Ho testato il comando sul mio sistema che esegue BusyBox v1.22.1.) Forse è necessario aggiornare? Il tuo BusyBox è molto vecchio? – Vality

+0

Ho la v1.20.2 ma non sono sicuro se sia possibile installare una versione più recente. – svlasov

Problemi correlati