Quiero escribir un script de shell para automatizar una serie de comandos. El problema es que algunos comandos DEBEN ejecutarse como superusuario y algunos comandos NO DEBEN ejecutarse como superusuario. Lo que he hecho hasta ahora es algo como esto:¿Cómo escribir un script de shell que ejecuta algunos comandos como superusuario y algunos comandos no como superusuario, sin tener que cuidarlo?
#!/bin/bash
command1
sudo command2
command3
sudo command4
El problema es que esto significa que alguien tiene que esperar hasta comando1 termina antes de que se le pida una contraseña, entonces, si Command3 toma el tiempo suficiente, lo harán a continuación, tiene que esperar a que command3 termine. Sería bueno si la persona pudiera levantarse y marcharse, luego regresar una hora más tarde y terminar. Por ejemplo, la siguiente secuencia de comandos tiene este problema:
#!/bin/bash
sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"
¿Cómo puedo hacerlo de modo que el usuario sólo pueden introducir su contraseña una vez, al principio, y luego a pie?
Actualización:
Gracias por las respuestas. Estoy corriendo en Mac OS X Lion y corrió el guión de Stephen P y tiene resultados distintos: (también agregué $ HOME)
[email protected] scratch$ ./test2.sh
uid is 501
user is pair
username is
home directory is /Users/pair
[email protected] scratch$ sudo ./test2.sh
Password:
uid is 0
user is root
username is root
home directory is /Users/pair
También se puede hacer una concha script que es propiedad de root y tiene el bit 'suid' establecido, pero que puede ser peligroso si no lo haces bien. Cada vez que ejecuta scripts de shell como root, puede considerar usar 'trap' para manejar señales. http://www.shelldorado.com/goodcoding/tempfiles.html tiene algunos ejemplos. –
Extraño, en realidad obtengo resultados diferentes. Esto es en Mac OS X Lion: 'par @ abadía cero $/test2.sh'
' UID es 501'
'usuario es pair'
' nombre de usuario es ''
directorio principal es/Users/par. ''
par @ abadía cero $ sudo ./test2.sh ''
Contraseña: ''
uid es 0'
'usuario es root'
' 'nombre de usuario es root' directorio principal
es/Users/pair'
'pair @ abbey scratch $ sudo -u pair ./test2.sh'
'uid es 501'
'usuario está pair'
' 'nombre de usuario es directorio principal pair'
es/Users/pair'
– speedarius
Lo siento por el formato del comentario anterior; Estoy actualizando la publicación original ahora ... – speedarius