Escribí un script de bash para verificar varias configuraciones en un sistema, pero obtengo resultados diferentes dependiendo de si se ejecuta desde la línea de comandos directamente o desde el script. Aquí está el comando:
bt_discoverable=$(system_profiler SPBluetoothDataType | grep Discoverable)
Si deshabilito el detectable en el bluetooth y luego hago eco en la variable en la línea de comandos obtengo el resultado esperado:
Discoverable: No
Pero si hago eco inmediatamente después de ejecutar el mismo comando desde un script de bash, obtengo
Discoverable: Yes
El script eleva sus privilegios a través de una función interna de sudo, así que comenté el bloque para esa función y volví a ejecutar el script. Esta vez, las cosas funcionaron como debían. Aquí está la función de elevación:
RunAsRoot()
{
if [[ "${USER}" != "root" ]] ; then
echo
echo
echo "*** Type the password for ${USER} and press ENTER ***"
echo
sudo $1 && exit 0
fi
}
RunAsRoot $0
Esta función es lo primero que ejecuta el script, por lo que la posición del código es un problema.
¿Por qué la ejecución en un shell (sub) de privilegios elevados causa este problema? ¿Es el problema Terminal, Bash o algo más que ignoro?