Ho scritto uno script bash per verificare vari config su un sistema, ma ottengo risultati diversi a seconda che venga eseguito direttamente dalla riga di comando o dallo script. Ecco il comando:
bt_discoverable=$(system_profiler SPBluetoothDataType | grep Discoverable)
Se disattivo rilevabile sul bluetooth e poi echo la variabile sulla riga di comando ottengo il risultato previsto:
Discoverable: No
Ma se lo faccio eco subito dopo aver eseguito lo stesso comando da uno script bash, ottengo
Discoverable: Yes
Lo script eleva i suoi privilegi attraverso una funzione interna sudo, quindi ho commentato il blocco per quella funzione e ho eseguito nuovamente lo script. Questa volta, le cose hanno funzionato come dovrebbero. Ecco la funzione di elevazione:
RunAsRoot()
{
if [[ "${USER}" != "root" ]] ; then
echo
echo
echo "*** Type the password for ${USER} and press ENTER ***"
echo
sudo $1 && exit 0
fi
}
RunAsRoot $0
Questa funzione è la prima cosa che viene eseguita dallo script, quindi la posizione del codice è un problema.
Perché l'esecuzione in una shell con privilegi elevati (sotto) causa questo problema? Il problema è Terminal, Bash o qualcos'altro di cui sono ignorante?