Amb*_*dex 12 sudo bash permissions bash-scripting
为什么以下两次执行的输出不同?(我的最终命令中的变量需要双引号)
$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!
Run Code Online (Sandbox Code Playgroud)
gle*_*man 19
Bash 在执行命令之前执行一系列扩展 (在本例中)。在第一种情况下,执行命令替换是因为它在双引号中——它像你一样执行,因此出现错误。在第二种情况下,单引号防止扩展,因此在 root 的 shell 运行之前不会替换反引号。sudo
另见https://www.gnu.org/software/bash/manual/bashref.html#Quoting
在第一个示例中,反引号由您的 shell 评估(作为您而不是 root)。试试
sudo su -c "echo `whoami`"
Run Code Online (Sandbox Code Playgroud)
在第二个带单引号'
的字符串中,整个字符串echo `cat /root/root_file`
被传递到根 shell。