Pour faire un patch manuellement, je dois taper cette commande
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Il y a un espace juste avant le 09:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
Comment puis-je l'exécuter dans un script?
Il existe également plusieurs autres commandes, mais celle-ci pose problème.
sudo
mot de passe - le script ne pourra pas s'exécuter complètement si quelqu'un n'est pas là pour le saisir.sudoers
configuration. Pas grand chose. Il faut juste réparer.Réponses:
C'est rarement une bonne idée d'avoir des
sudo
scripts internes. Au lieu de cela, supprimez lesudo
du script et exécutez-le avecsudo
:De cette manière, toutes les commandes du script seront exécutées avec les privilèges root et il vous suffira de donner le mot de passe une fois lors du lancement du script. Si vous avez besoin qu'une commande particulière dans le script soit exécutée sans
sudo
privilèges, vous pouvez l'exécuter en tant qu'utilisateur normal avec (merci Lie Ryan ):L'espace est sans importance, il ne doit affecter rien, il y a toujours un espace entre une commande et ses arguments.
la source
sudo
appels explicites dans le script, car élever tout le script à la racine peut être une idée terrible s'il ne reste qu'une poignée d'actions étroites nécessitant root. Dans ce contexte, je répondais spécifiquement à votre commentaire: "En grande partie parce que cela signifie que vous ne pouvez pas exécuter le script automatiquement car vous devrez entrer le mot de passe à chaque fois que vous serez invité."Vous pouvez éventuellement modifier le
sudoers
fichier.Courez
sudo visudo
.Ajoutez une entrée pour votre nom d'utilisateur et le script que vous souhaitez exécuter sans demander de mot de passe.
la source
sudoers
fichier.Vous pouvez essayer quelque chose comme:
Ce n'est pas la chose la plus sûre à faire puisque vous écrivez un mot de passe sudoer en texte brut. Pour le rendre un peu plus sécurisé, vous pouvez créer une variable et lire le mot de passe sudo dans la variable, puis exécuter la commande en tant que:
De plus, si toutes les commandes que vous exécutez ne sont pas gênantes, vous pouvez simplement exécuter votre script à l’aide
sudo
de ce qui a été suggéré précédemment.la source
read -s PASSWORD
Cette réponse est similaire à la réponse de terdon . Je suggérerais également d'exécuter le script principal avec
sudo
afin que le script puisse s'exécuter sans avoir à demander le mot de passe de l'utilisateur pendant son exécution.Toutefois, si vous souhaitez supprimer les privilèges root de certaines commandes et les exécuter en tant qu'utilisateur ayant appelé la commande
sudo
, vous pouvez rechercher la$SUDO_USER
variable afin de déterminer l'utilisateur d'origine.Voici un exemple de script vous expliquant comment y parvenir:
la source
Il existe en fait un moyen beaucoup plus simple de le faire. Pour la portabilité, ceci est mon implémentation mais n'hésitez pas à le manipuler pour répondre à vos besoins.
Entrez votre mot de passe sudo en tant que paramètre lors du démarrage du script, capturez-le et renvoyez-le avec chaque commande qui vous demandera le mot de passe sudo.
Vous pouvez ajouter une invite et capturer une fois le script lancé, comme suit:
Mais si quelqu'un d'autre surveille ce qui est exécuté sur le nœud; a accès aux journaux créés par celui-ci; ou est simplement en train de regarder au-dessus de votre devrait lorsque vous exécutez un test, cela pourrait compromettre la sécurité
Cela fonctionne également avec les commandes / scripts en cours d'exécution qui nécessitent un oui pour continuer:
L'écho est une réponse à une invite. Vous pouvez donc utiliser tout ce dont vous avez besoin si vous exécutez d'autres scripts comportant des invites de progression, dans un ordre séquentiel. Assurez-vous de connaître cet ordre, sinon, de mauvaises choses peuvent arriver.
la source
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php Cela devrait éviter ce problèmela source
Vous pouvez essayer d’ajouter l’utilisateur qui exécute le script au fichier sudoers:
la source