Actualmente estoy trabajando en un script bash que instala y configura varios programas en un sistema Linux estándar (actualmente, Ubuntu). Debido a que instala programas y copia una cantidad de archivos en varias carpetas que requieren privilegios elevados, ya hice el estándar "Necesito privilegios elevados" y salgo.
Sin embargo, me gustaría, si es posible, poder solicitar al usuario su contraseña de sudo y elevar los privilegios del script automáticamente si el usuario no ejecuta el comando de script con sudo (como iniciarlo desde el administrador de archivos GUI), sin que el usuario tenga que reiniciar el script.
Como está diseñado para ejecutarse en instalaciones de Linux en stock, cualquier opción que modifique el sistema no funcionará para mis propósitos. Todas las opciones deben estar contenidas en el script en sí.
¿Es esto posible dentro de Bash? Si es así, ¿cuál es la mejor manera (segura, pero concisa) de hacer esto?
Respuestas:
Corro
sudo
directamente desde el script:fuente
Yo sugiero:
fuente
if [[ -t 1 ]];
comprueba?Agregue esto como la primera línea del script:
Cambiar
sudo
agksu
ogksudo
si prefieren un símbolo gráfico.fuente
"$*"
va a fusionar todos los argumentos en uno (/path/to/script one two three
va a resultar en$1
serone two three
), y$*
sin comillas desordenará los espacios en los argumentos."$@"
funciona biensudo
, es mucho mejor que usarsu
. Pero si realmente quieres, probablementeexec su -c "$0" "$@"
script de ejemplo no me importa compartir ::
--ImP.TeK
fuente
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- ¡Parece un revestimiento realmente eficiente! ¡Agradable!$EUDI
, o siempre el mismo resultado? Por ejemplo,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"