Назад | Перейти на главную страницу

Попытка использовать sudo с подоболочкой bash: переменные env не работают

Я прочитал несколько других сообщений, кажется обременительным выполнять несколько команд в sudo. Heredocs страдают от ограничения, заключающегося в невозможности перенаправления stdin / stdout. В любом случае, это часть логики, которую я хочу запустить, отредактированная, чтобы содержать конкретную проблему: DIR env var не «живет» после его создания в первой команде? Как правильно иметь постоянные переменные env в подоболочке?

  $ sudo -- /bin/bash -c "(export DIR=/etc/sources.list.d; echo dir is $DIR; mkdir -p $DIR; touch $DIR/cloudera.list)"

dir is
mkdir: missing operand
Try `mkdir --help' for more information.

Проблема не в sudo, но ваше цитирование. Используйте одинарные кавычки вместо двойных кавычек.

Если вы хотите, чтобы переменная интерпретировалась подоболочкой в ​​любом контексте (sudo, sshи т. д.), вам нужно избегать его особого значения, чтобы его анализ не происходил в текущей оболочке.

Фактически это отправляется в sudo:

/bin/bash -c (export DIR=/etc/sources.list.d; echo dir is ; mkdir -p ; touch /cloudera.list)