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へのNOPASSWDアクセスを提供する行があるかどうかを確認するには、/etc/sudoers.d/dev_ops次の点を考慮してください。/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:" と一致する行がない場合、この操作は失敗します。 - ?from を受け取り、ed変更は適用されません。

関連情報