Является ли это нормальным?
> 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 ~