J'essaie d'exécuter diverses commandes via sudo , où le signe égal ( = ) fait partie de la commande. Dans certains cas, il semble que sudo confonde ce signe pour la variable setting et environment.
Je vois ceci dans sudo (8) man:
Environment variables to be set for the command may also be passed on the command line in the form of VAR=value...
C'est un problème pour moi, par exemple, si j'essaie d'exécuter une commande comme celle-ci:
sudo -i "cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls"
En fait, il passe dans un shell racine au lieu d'exécuter la commande, car celle-ci est mal interprétée. Je vois ceci dans sudo.log :
Apr 29 16:11:40 : my_user : TTY=pts/7 ; PWD=/home/my_user ; USER=root ; ENV=cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls ; COMMAND=/bin/bash
Comme vous pouvez le constater, la commande est en fait mal interprétée comme une tentative de définition de ENV.
Si je supprime ce qui précède, cd /tmp;
cela fonctionnera. Cependant, pour certaines de mes affaires, je dois d'abord exécuter une commande cd ou quelque chose de similaire.
Cela semble être dû au signe égal qui fait que sudo pense que je mets ENV. Si je supprime le signe égal (c'est-à-dire que je supprime -D dfs.replication=2
), alors cela fonctionne et est enregistré correctement:
Apr 29 16:08:46 : my_user : TTY=pts/7 ; PWD=/home/my_user ; USER=root ; COMMAND=/bin/tcsh -c cd /tmp; /usr/bin/hadoop fs -ls
Ma question est: Comment puis-je échapper à cette = caractère, et / ou obtenir la commande sudo lu comme une commande tout, au lieu de penser un signe égal est la mise en une variable d'environnement?
Merci beaucoup!
--
pour arrêter l'analyse des arguments de ligne de commande en premier: sudo -i -- "cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls"
(je n'ai pas de système avec sudo install à portée de main pour pouvoir le tester moi-même). Si cela fonctionne, j'écris volontiers une réponse.
cd
soit dans sudo, car un utilisateur non privilégié ne pourra pas accéder au répertoire autrement.