Tengo estas líneas de script de mi ISP:
sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options
echo "l2tpnoipsec">>/etc/ppp/options
Funciona si pego línea por línea en la Terminal. Quiero crear un archivo * .command y ejecutarlo haciendo doble clic. Pero todo lo que obtengo es la solicitud de contraseña y luego la ventana bash vacía. El archivo de "opciones" resultante está vacío.
Intenté esto:
#!/bin/bash
echo "plugin L2TP.ppp">>/etc/ppp/options
echo "l2tpnoipsec">>/etc/ppp/options
Yo obtengo:
/ etc / ppp / options: permiso denegado
Creo que necesito usar algún comando para obtener privilegios de root desde adentro de bash.
Respuestas:
Tome el guión que creó:
Guárdelo en su directorio de inicio, o en un directorio 'scripts' dentro de su directorio de inicio, como l2tp.sh. Permita que se ejecute (escriba este comando en la Terminal):
Para ejecutar el archivo usando sudo (privilegios de root):
Método 1. En tipo de terminal:
Método 2. Cree un archivo run_l2tp.command con este contenido:
Permitir que se ejecute:
Cuando hace doble clic en run_l2tp.command e ingresa la contraseña, el archivo l2tp.sh se ejecutará con privilegios de root.
Algunas notas:
fuente
Guarda esto:
a su escritorio en un archivo llamado
script.sh
.Abra una ventana de Terminal y escriba:
Ingrese su contraseña cuando se le solicite y todos los comandos en el archivo se ejecutarán con privilegios de superusuario.
fuente
Si por razones de seguridad, no desea que ningún usuario de su sistema pueda ejecutar el script, sino que desea que se le solicite una contraseña administrativa, una solución alternativa sería guardar el script de shell y luego usar el programa Editor de AppleScript para crear un AppleScript.
El AppleScript sería una frase, diciendo
do shell script «your script's name here» with administrator privileges
. Guarde ese script como una aplicación. Luego, cuando haga clic en él, le pedirá una contraseña de administrador, luego ejecutará el script de shell con privilegios de administrador.Obviamente, reemplace
«your script's name here»
con la ruta a su script.fuente
El problema es que cuando lo haces desde la línea de comandos, lo que estás haciendo es comenzar desde
bash
abajosudo
y luego enviar esos dos comandos siguientesbash
, no el shell original. (la señal es que necesitas hacerloexit
dos veces)Cuando lo hace en un script, el
bash
comando nunca sale, por lo que los siguientes dos comandos nunca se ejecutan.No es tan elegante como la solución AppleScript, pero si va a hacer esto como un script desde la línea de comandos, el equivalente sería:
Si no necesitáramos el redireccionamiento io (el
>>
bit), podríamos llamar directamente al comandosudo
sin necesidad delsudo sh -c
truco. (y tenga en cuenta que tuve que citar el argumento parash -c
evitar que ejecute el eco como raíz, pero el archivo se agrega como el usuario original).Se va a trabajar como un
.command
archivo desde el Finder, sino que va a abrir una ventana de terminal, solicitando su contraseña, y si se ha introducido correctamente, ejecutar los comandos. (suponiendo que no se haya autenticado recientemente parasudo
... si lo ha hecho, se ejecutará sin preguntar)fuente