Existe-t-il un moyen d'exécuter deux commandes Db2 à partir d'une ligne de commande? (Ils seront appelés à partir d'une exec
commande PHP .)
db2 connect to ttt
(notez que nous devons avoir la connexion en direct pour la deuxième commandedb2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'
J'ai essayé ceci:
sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'
La première commande se termine correctement mais la seconde échoue avec le message d'erreur SQL1024N A database connection does not exist. SQLSTATE=08003
Notez que je dois l'exécuter en tant qu'utilisateur php. La commande en sudo -u db2inst1 id
tant qu'utilisateur php me donne une sortie correcte.
Réponses:
sudo peut exécuter plusieurs commandes via un shell, par exemple:
Votre commande serait quelque chose comme:
Si votre version sudo ne fonctionne pas avec des points-virgules avec -s (apparemment, ce n'est pas le cas si compilé avec certaines options), vous pouvez utiliser
à la place, qui fait essentiellement la même chose mais vous oblige à nommer le shell explicitement.
la source
sudo -s -- '/usr/bin/whoami; /usr/bin/whoami' /bin/bash: /usr/bin/whoami; /usr/bin/whoami: No such file or directory
sudo -- sh -c 'whoami; whoami;
comme solution de contournement lorsque "sudo -s" est cassé. J'ai également mis à jour la réponse.--
indique la fin des paramètres àsudo
, donc tout le reste fait partie de la commande; sans elle, des arguments comme-c
pourraient être interprétés comme un argument desudo
. Cela fonctionne pour la plupart des programmes de ligne de commande (mais pas tous). Pour un autre (non-sudo
) exemple, pour supprimer un fichier appelé,-f
vous ne pouvez pas simplement exécuterrm -f
, non ?! Mais vous pouvez exécuterrm -- -f
pour supprimer le fichier appelé-f
.Pour votre commande, vous pouvez également vous référer à l'exemple suivant:
sudo sh -c 'whoami; whoami'
la source
Je fais habituellement:
la source
Si vous souhaitez gérer les devis:
la source
sudo
- vous devez toujours le tromper en exécutant un shell qui peut accepter plusieurs commandes à exécuter en tant que paramètres"Une alternative utilisant
eval
afin d'éviter l'utilisation d'un sous-shell:Remarque: les autres réponses utilisant
sudo -s
échouent car les guillemets sont transmis à bash et exécutés en une seule commande, il faut donc supprimer les guillemets avec eval.eval
est mieux expliqué est cette réponse SOCiter dans les commandes est également plus facile:
Et si les commandes doivent s'arrêter si l'une d'elles échoue, utilisez des doubles-esperluettes au lieu de points-virgules:
la source
L'
-s
option n'a pas fonctionné pour moi-i
.Voici un exemple de la façon dont je pourrais mettre à jour la taille du journal à partir de mon bash:
la source
Sur le terminal, tapez:
Ensuite, écrivez autant de commandes que vous le souhaitez. Tapez
exit
quand vous avez terminé.Si vous avez besoin de l'automatiser, créez un
script.sh
fichier et exécutez-le:la source
Sur un sujet légèrement lié, je voulais faire le même sudo multi-commandes via SSH mais rien de ce qui précède n'a fonctionné.
Par exemple sur Ubuntu,
L'astuce découverte ici est de doubler la commande.
Autres options qui fonctionnent également:
En principe, des guillemets doubles sont nécessaires car je pense que le shell client sur lequel SSH est exécuté supprime l'ensemble de guillemets le plus extérieur. Mélangez et associez les citations à vos besoins (par exemple, les variables doivent être transmises). Cependant YMMV avec les guillemets surtout si les commandes à distance sont complexes. Dans ce cas, un outil comme Ansible fera un meilleur choix.
la source
Si vous connaissez le mot de passe root, vous pouvez essayer
la source
sudo su -c "<command1> ; <command2>"
.Les réponses ci-dessus ne vous permettront pas de citer à l'intérieur des guillemets. Cette solution va:
La commande umask et la commande mkdir s'exécutent toutes deux avec l'utilisateur «personne».
la source