sudo -i допускает только один аргумент

Это нормально?

> sudo -u misc -i "ls"
note test tmp
> sudo -u misc -i "ls ~"
-bash: ls ~: command not found
> sudo -u misc -i "ls ~"
-bash: ls ~: command not found
> sudo -u misc -i "foo=bar"
[misc]

Все, что имеет пробел в нем, кажется, интерпретируется как одна команда, которая не распознается. Еще более странно, что установка любой переменной окружения бросает меня в учетную запись другого пользователя. Как я могу выполнить эти команды, как ожидалось?

2
задан 4 January 2012 в 02:01

2 ответа

Команды и аргументы, переданные sudo, не должны быть заключены в кавычки, поэтому вы можете попробовать

sudo -u misc -i ls -l

, но

sudo -u misc -i ls ~

не должны перечислять misc содержимое домашнего каталога, но ваш домашний, потому что символ ~ расширен до того, как был передан sudo. Вы можете попытаться избежать этого, используя

sudo -u misc -i ls '~'

, но это опять-таки не работает, потому что sudo не вызывает оболочку для выполнения своей команды, поэтому ~ не имеет смысла вне оболочки.

Наконец, решение может быть

sudo -u misc -i bash -c 'ls ~'
0
ответ дан 4 January 2012 в 02:01

Это работает для меня, но без кавычек:

sudo -u test -i ls -lah ~

0
ответ дан 4 January 2012 в 02:01

Другие вопросы по тегам:

Похожие вопросы: