В Bash я могу сделать следующее:
if [ -f /tmp/test.txt ]; then echo "true"; fi
Однако, если я добавлю sudo
вперед, это больше не будет работать:
sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'
Как я могу заставить это работать?
bash
command-line
sudo
prompt
m33lky
источник
источник
sudo
только наtest
и / или только наecho
. Не всеif
утверждение.if sudo test
? Да, так будет лучше. Я не могу использоватьtest
безif
, потому что он устанавливает код выхода в противном случае.Ответы:
sudo
выполняет свой аргумент, используяexec
не интерпретатор оболочки. Следовательно, он ограничен действительными двоичными программами и не может использовать функции оболочки, псевдонимы или встроенные функции (if
является встроенной функцией ). Обратите внимание, что параметры-i
и-s
могут использоваться для выполнения заданных команд в оболочке входа в систему или не входа в систему, соответственно (или только в интерактивном режиме оболочки; обратите внимание, что вам придется избегать точек с запятой или заключать команду в кавычки).источник
-i
или-s
, if-оператор будет оценен правильно?Попробуйте вызвать строку как строковый аргумент через оболочку.
источник