Ich versuche, verschiedene Befehle über sudo auszuführen , wobei das Gleichheitszeichen ( = ) Teil des Befehls ist. Unter bestimmten Umständen scheint sudo dieses Zeichen für die Einstellung und die Umgebungsvariable zu verwechseln.
Ich sehe das in 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...
Dies ist ein Problem für mich, wenn ich zum Beispiel versuche, einen Befehl auszuführen wie:
sudo -i "cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls"
Es geht tatsächlich in eine Root-Shell, anstatt den Befehl auszuführen, da der Befehl falsch interpretiert wird. Ich sehe das in 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
Wie Sie sehen, wird der Befehl fälschlicherweise als Versuch interpretiert, ENV zu setzen.
Wenn ich das vorhergehende entferne cd /tmp;, funktioniert es. Für einige meiner Sachen muss ich jedoch zuerst einen CD- Befehl oder ähnliches ausführen .
Dies scheint auf das Gleichheitszeichen zurückzuführen zu sein, das sudo glauben lässt, ich setze ENV. Wenn ich das Gleichheitszeichen entferne (dh entferne -D dfs.replication=2), funktioniert es und wird korrekt protokolliert:
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
Meine Frage lautet also: Wie kann ich dieses = Zeichen maskieren und / oder den Befehl als ganzen Befehl von sudo lesen lassen, anstatt zu glauben , dass ein Gleichheitszeichen eine Umgebungsvariable setzt?
Vielen Dank!
--Parsen von Befehlszeilenargumenten zu stoppen: sudo -i -- "cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls"(Ich habe kein System mit sudo install zur Hand, damit ich es selbst testen kann). Wenn es funktioniert, schreibe ich gerne eine Antwort.
cdsudo verwendet werden, da nicht privilegierte Benutzer sonst nicht auf das Verzeichnis zugreifen können.