Я пытаюсь запустить различные команды через sudo, где знак равенства (=) является частью команды. В некоторых случаях кажется, что sudo путает этот знак для установки и переменной среды.
Я вижу это в 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...
Это проблема для меня, например, если я пытаюсь выполнить команду вроде:
sudo -i "cd /tmp; /usr/bin/hadoop fs -D dfs.replication=2 -ls"
Это фактически входит в корневую оболочку вместо выполнения команды, так как команда неверно истолкована. Я вижу это в 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
Как видите, команда на самом деле неверно истолкована как попытка установить ENV.
Если я уберу предыдущий cd /tmp;
это будет работать. Тем не менее, для некоторых моих вещей, я должен сначала запустить команду cd или что-то подобное.
Это, кажется, из-за знака равенства, который заставляет sudo думать, что я устанавливаю ENV. Если я удаляю знак равенства (т.е. удаляем -D dfs.replication=2
), то он работает и записывается правильно:
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
Поэтому мой вопрос: как мне избежать этого символа = и / или заставить sudo прочитать команду как целую команду, вместо того, чтобы думать, что знак равенства устанавливает переменную среды?
Большое спасибо!