Estoy tratando de hacer un script como este:
#!/bin/bash
sudo -s
something...
Cuando lo ejecuto, obtengo un nuevo shell pero somethingse ejecuta solo cuando salgo del shell creado por sudo -s, no dentro de él.
¿Alguna ayuda?
shell-script
sudo
Matteo
fuente
fuente

sudo -ssolo en caso de que elrootusuario tenga la idea (bastante pobre) de cambiar su shell. Esto debería ser realmente losudo shque establece explícitamente qué shell se va a utilizar.Otra forma sería pasar un comando (s) completo de bash a
sudo:Sin embargo, una mejor manera sería iniciar el script con
sudo. No es una muy buena idea tenersudodentro del guión. Mucho mejor ejecutar todo el script con privilegios de root (sudo script.sh). Si es necesario, puede usarsudopara soltar privilegios para comandos específicos. Por ejemplo:Ejecutar el script anterior devuelve:
fuente
El shell Bourne tiene una
-cbandera que puede usar para pasar un script arbitrario al shell, para que pueda escribir algo comoSin embargo, esto solo es útil para los comandos más simples, porque es muy engorroso citar el script correctamente y el inconveniente es aún mayor si envía el comando a un servidor remoto a través de ssh porque el script de argumento se analizará dos veces, una vez al lado enviando el script y una vez al lado ejecutando el script.
Si
somethinges un script complejo o necesita ser pasado por una línea ssh , es una práctica común escribir una funciónprepare_something_scriptcuyo trabajo es escribir el script 'algo' en stdout . En su forma más simple, esta función puede usar un documento aquí para generar su salida:El script producido por
prepare_something_scriptpuede ejecutarse localmente con los privilegios otorgados por sudo de la siguiente manera:En el escenario donde el script debe ejecutarse de forma remota con los privilegios otorgados por sudo , es habitual codificar el script en la base 64 para evitar redirigir la entrada estándar de ssh , de esta manera:
Si usa ese código en una función, no olvide marcar la variable something64 como local . Algunas implementaciones de base64 ofrecen un
-dindicador para decodificar, que es menos compatible que la--decodevariante detallada . Algunas implementaciones requieren agregar un-w 0comando de codificación para evitar saltos de línea espurios.fuente
Debe agregar el comando antes de sudo -s, en lugar de en la siguiente línea.
fuente