[英]bash script: sudo no interactive echo redirection to a file
在bash脚本中,我试图将使用sudo非交互式的echo打印的文本重定向到文件。 但是我不清楚如何去做。
我尝试使用以下代码:
echo $sudopass| sudo -S echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible
输出重定向不受提升的sudo
权限影响。 sudo
的部分是echo
, 而不是该命令输出的重定向。
在您当前用户的许可下,这仍然会发生。
因此,您需要一种将行追加到不涉及输出重定向的文件的方法。
注意: 如果目标文件为空或不存在,则此答案的较早版本将sed
删除,因为sed
破坏sed
。 我想保持答案的要点不变-“如何避免输出重定向”-我添加了有关如何将vi
用于相同目的的说明。
每个符合POSIX的系统都需要具有vi
/ ex
编辑器。 (在现代Linux机器上,通常以兼容模式启动Vim的链接。)您可以通过命令行“远程控制” ex / vi / Vim:
vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible
(为了清楚起见,这没有sudo
部分。)
说明:
-e
在“ ex模式”下启动vi
。 (相当于致电ex
。) -s
表示“静音”-没有提示,没有消息。 -c
在读取第一个文件后将命令传递给编辑器以执行该命令。 "normal! G"
将编辑器置于“ normal mode”(正常模式),这就是您以交互方式启动vi
会遇到的情况; ex
默认情况下处于“命令模式”(就像您在vi中输入:
)。 G
将光标移到最后一行。 "normal! o..."
再次激活正常模式,在当前行之后添加一行,然后激活“插入模式”。 字符串的其余部分按原样输入。 "x"
保存文件并退出编辑器。 命令行包括sudo
部分:
echo $sudopass | sudo -S vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.