Это нормально?
> 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]
Все, что имеет пробел в нем, кажется, интерпретируется как одна команда, которая не распознается. Еще более странно, что установка любой переменной окружения бросает меня в учетную запись другого пользователя. Как я могу выполнить эти команды, как ожидалось?
Команды и аргументы, переданные 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 ~'
Это работает для меня, но без кавычек:
sudo -u test -i ls -lah ~
blockquote>