要通过... 命令使用带有“echo
进入文件”重定向运算符的命令,我已编写了 通过标准输入重定向到以超级用户身份执行的进程。要重定向的命令是,我在这里将其放在了原处。>>
sudo
sudo
echo "tun" >> /etc/modules-load.d/tun.conf
whoami
我试过
echo 'whoami' | sudo -i '$SHELL -c "exec $(< /dev/stdin)"'
接下来,
echo 'whoami' | sudo -i '$SHELL -c "$(< /dev/stdin)"'
并sh
作出回应-sh: /bin/sh -c "$(< /dev/stdin)": not found
。
这是为了什么?为什么 Alpine Linux 发行版找不到sh
通过 执行的命令sudo
?
sudo -V
(版本号和编译版本):
Sudo version 1.9.15p5
Sudoers policy plugin version 1.9.15p5
Sudoers file grammar version 50
Sudoers I/O plugin version 1.9.15p5
Sudoers audit plugin version 1.9.15p5
感谢您的回答!🙂
请注意,错误消息表明
/bin/sh -c "$(< /dev/stdin)"
未找到该文件。它会尝试将整个字符串作为命令执行,因为您告诉它sudo
这样做(除了不必要的选项外,字符串是该命令的唯一参数-i
)。相反,你应该使用
... 使用 和 作为参数运行
$SHELL
。-c
但exec $(< /dev/stdin)
请注意,如果$SHELL
shell 不理解进程替换,例如sh
,则您不会期望内联 shell 脚本产生任何输出。相反,使用$SHELL -s
(运行 shell 并让它从标准输入读取命令):