Ejecución de la función fiesta al mando de su
Pregunta
En mi escritura del golpe, me ejecutar algunos comandos como otro usuario. Quiero llamar a una función de bash utilizando su
.
my_function()
{
do_something
}
su username -c "my_function"
El script anterior no funciona. Por supuesto, my_function
no está definido dentro su
. Una idea que tengo es poner la función en un archivo separado. ¿Tiene una idea mejor que evita hacer otro archivo?
Solución
Se puede exportar la función para que esté disponible para el subnivel:
export -f my_function
su username -c "my_function"
Otros consejos
Se podría permitir 'sudo' en su sistema, y ??utilizar en su lugar.
Debe tener la función en el mismo ámbito donde vaya a utilizarlo. Así que, o colocar la función dentro de las comillas, o poner la función a una secuencia de comandos independiente, que a continuación, ejecuta con su -c.
Otra forma podría estar haciendo los casos y que pasa un parámetro a la secuencia de comandos ejecutados. Ejemplo podría ser: En primer lugar hacer un archivo llamado "script.sh". A continuación, insertar este código en él:
#!/bin/sh
my_function() {
echo "this is my function."
}
my_second_function() {
echo "this is my second function."
}
case "$1" in
'do_my_function')
my_function
;;
'do_my_second_function')
my_second_function
;;
*) #default execute
my_function
esac
Después de añadir el código anterior ejecutar estos comandos para verlo en acción:
root@shell:/# chmod +x script.sh #This will make the file executable
root@shell:/# ./script.sh #This will run the script without any parameters, triggering the default action.
this is my function.
root@shell:/# ./script.sh do_my_second_function #Executing the script with parameter
this function is my second one.
root@shell:/#
Para hacer este trabajo como usted requirió que sólo tendrá que ejecutar
su username -c '/path/to/script.sh do_my_second_function'
y todo debería estar funcionando bien. Espero que esta ayuda:)