Question

Dans mon script bash, j'exécuter certaines commandes comme un autre utilisateur. Je veux appeler une fonction bash en utilisant su.

my_function()
{
  do_something
}

su username -c "my_function"

Le script ci-dessus ne fonctionne pas. Bien sûr, my_function n'est pas défini à l'intérieur su. Une idée que j'ai est de mettre la fonction dans un fichier séparé. Avez-vous une meilleure idée qui évite de faire un autre fichier?

Était-ce utile?

La solution

Vous pouvez exporter la fonction pour le rendre à la disposition du sous-shell:

export -f my_function
su username -c "my_function"

Autres conseils

Vous pourriez activer Sudo dans votre système, et utilisez-le.

Vous devez avoir la fonction dans le même champ où vous l'utilisez. Donc, soit placer la fonction à l'intérieur des guillemets, ou mettre la fonction à un script séparé, que vous exécutez ensuite avec su -c.

Une autre façon pourrait être fait cas et passer un paramètre au script exécuté. Exemple pourrait être: Faites d'abord un fichier appelé « script.sh ». Ensuite, insérez ce code dans le:

#!/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

Après avoir ajouté le code ci-dessus pour exécuter ces commandes voir en action:

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:/#

Pour faire ce travail que vous devez vous aurez juste besoin de faire tourner

su username -c '/path/to/script.sh do_my_second_function'

et tout devrait fonctionner très bien. Espérons que cela aide:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top