如何在 bash 的行尾添加条目

如何在 bash 的行尾添加条目

我有一个 sudoers 文件,我试图在行尾添加 /usr/sbin/ifconfig 。所以我想要完成的是:

devops  ALL=(root) NOPASSWD: /usr/sbin/ifconfig, /usr/sbin/ethtool, /usr/sbin/hwclock

我尝试运行:

echo "/usr/sbin/ifconfig" | ssh $i "tee -a /etc/sudoers.d/dev_ops" 

但它只会创建另一行,但我不需要重复的行。

答案1

为了确保其中有一行向devops/etc/sudoers.d/dev_ops提供 NOPASSWD 访问权限,请考虑以下内容:/usr/sbin/ifconfig

grep -q '^devops.*NOPASSWD:.*/usr/sbin/ifconfig' /etc/sudoers.d/dev_ops || 
  ed -s /etc/sudoers.d/dev_ops <<< $'/^devops.*NOPASSWD:/ s!$!, /usr/sbin/ifconfig!\nw\nq'

目的是:查找以“devops”开头的字符串,然后包含字符串“NOPASSWD:”,在同一行中的某个位置后跟字符串“/usr/sbin/ifconfig”。如果该字符串确实不是存在于文件中,然后使用ed查找以“devops”开头且后跟字符串“NOPASSWD:”的(假定)行;在该行上,搜索并将行尾替换为“, /usr/sbin/ifconfig”,然后保存并退出。如果没有与/etc/sudoers.d/dev_ops正则表达式“^devops.*NOPASSWD:”匹配的行,这将失败——您将得到一个?fromed并且不会应用任何更改。

相关内容