从命令提示符执行 if 语句

从命令提示符执行 if 语句

在 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'

我怎样才能让它发挥作用?

答案1

sudo使用 执行其参数exec,而不是通过 shell 解释器。因此,它仅限于实际的二进制程序,不能使用 shell 函数、别名或内置函数(if是内置函数)。请注意,-i-s选项可用于分别在登录或非登录 shell 中执行给定命令(或仅交互地执行 shell;请注意,您必须转义分号或引用命令)。

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y

答案2

尝试通过 shell 调用该行作为字符串参数。

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'

相关内容