繁体   English   中英

bash脚本:sudo没有交互式回显重定向到文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM