Para hacer un parche manualmente, debo escribir este comando
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Hay un espacio justo antes del 09:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
¿Cómo puedo ejecutar esto dentro de un script?
También hay varios otros comandos, pero este está dando problemas.
sudo
contraseña - el script no podrá ejecutarse completamente si alguien no está allí para ingresarlo.sudoers
configuración. No es gran cosa. Solo necesita repararse.Respuestas:
Rara vez es una buena idea tener
sudo
guiones internos. En su lugar, elimine elsudo
script y ejecute el script en sí consudo
:De esa forma, todos los comandos dentro del script se ejecutarán con privilegios de root y solo deberá proporcionar la contraseña una vez al iniciar el script. Si necesita que se ejecute un comando particular dentro del script sin
sudo
privilegios, puede ejecutarlo como un usuario normal con (gracias Lie Ryan ):El espacio es irrelevante, no debería afectar a nada, siempre hay un espacio entre un comando y sus argumentos.
fuente
sudo
llamadas explícitas en el script, porque elevar todo el script a root puede ser una idea terrible si solo hay un puñado de acciones limitadas que necesitan root. En ese contexto, respondía específicamente a su comentario: "Principalmente porque esto significa que no puede ejecutar el script automáticamente, ya que deberá ingresar la contraseña cada vez que se le solicite".Posiblemente podría modificar el
sudoers
archivo.Ejecutar
sudo visudo
.Agregue una entrada para su nombre de usuario y el script que desea ejecutar sin que se le solicite una contraseña.
fuente
sudoers
archivo.Podrías probar algo como:
Esto no es lo más seguro, ya que está escribiendo una contraseña de sudoer en texto sin formato. Para hacerlo un poco más seguro, puede crear una variable y leer la contraseña de sudo en la variable y luego puede ejecutar el comando como:
Además, si no le importa que todos sus comandos se ejecuten como root, simplemente puede ejecutar su script utilizando
sudo
, como se sugirió anteriormente.fuente
read -s PASSWORD
Esta respuesta es similar a la respuesta de terdon . También sugeriría ejecutar el script principal con
sudo
para que el script pueda ejecutarse sin tener que pedir la contraseña del usuario durante su ejecución.Sin embargo, en caso de que desee colocar privilegios de root en algunos de los comandos y ejecutarlos como el usuario real que invocó el comando
sudo
, puede verificar la$SUDO_USER
variable para averiguar el usuario original.Este es un script de ejemplo de cómo podría lograr eso:
fuente
En realidad, hay una manera mucho más simple de hacer esto. Para la portabilidad, esta es mi implementación, pero siéntase libre de manipularla para satisfacer sus necesidades.
Ingrese su contraseña de sudo como parámetro al iniciar el script, captúrelo y repítalo con cada comando que le solicitará la contraseña de sudo.
Puede agregar una solicitud y capturar después de que se inicia el script de la siguiente manera:
Pero si alguien más monitorea lo que se ejecuta en el nodo; tiene acceso a los registros creados por él; o simplemente está mirando su deber al azar cuando ejecuta una prueba, eso podría comprometer la seguridad.
Esto también funciona con comandos / scripts en ejecución que requieren un sí para continuar:
El eco responde a una solicitud, por lo que puede usar cualquier cosa que necesite, allí, si está ejecutando otras secuencias de comandos que tienen indicaciones de progreso, en orden secuencial. Sin embargo, asegúrese de conocer ese orden o pueden ocurrir cosas malas.
fuente
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php Eso debería evitar este problemafuente
Podría intentar agregar el usuario que ejecuta el script al archivo sudoers:
fuente