考虑你有一台带有Bash的Linux/UNIX机器。您有一个文件密钥.txt只有 root 才能读取。 你想使用一个将字符串作为参数的命令,比如说,
sample-command <string>
以 root 用户身份登录并使用文本文件的第一行运行命令:
root ~ $ sample-command $(sed '1!d' secret.txt)
非 root 用户可以做到这一点吗?
注意。sudo sh -c "<command>"
没有帮助,因为子外壳不会继承根/sudo 特权。例如
sarah ~ $ sudo sh -c "echo $(whoami)"
给你sarah
,而不是root
。
像命令替换这样的扩展将在执行实际命令行之前由 shell 处理:
sudo sh -c "echo $(whoami)"
foouser
这里 shell 将首先运行whoami
,作为当前用户,将扩展替换为它的结果,然后执行
sudo sh -c "echo foouser"
扩展不会发生在单引号内:
sudo sh -c 'echo "$(whoami)"'
root
在此示例中,调用 shell 不会处理$(whoami)
因为它出现在单引号内。 因此,$(whoami)
将在调用 echo 之前通过 subshell 进行扩展。