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?

¿Fue útil?

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:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top