fonction bash en cours d'exécution dans la commande de su
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?
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:)