Escribí un bash script para verificar varias configuraciones en un sistema, pero estoy obteniendo diferentes resultados 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 desactivo discoverable en el bluetooth y luego hago eco de la variable en la línea de comandos obtengo el resultado esperado:
Discoverable: No
Pero si me hago eco inmediatamente después de ejecutar el mismo comando desde un bash script, obtengo
Discoverable: Yes
El script eleva sus privilegios a través de una función interna de sudo, así que comenté el bloque de esa función y ejecuté de nuevo el script. Esta vez, las cosas funcionaron como deberí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 (sub)shell con privilegios elevados causa este problema? ¿El problema es Terminal, Bash, o alguna otra cosa que desconozco?