sudoers переименовывает cmnd_alias и заменяет место ссылки
Мне нужно объединить сотню файлов sudoers в один большой файл.. это требование
полученный объединенный файл должен быть действительным файлом sudoers
Я проверяю с visudo -cf huge_sudoers
если я объединяю файлы, есть дублированные псевдонимы команд, которые иногда различаются между хостами. Я уже удалил дублированные. но есть псевдонимы команд, которые называются одинаково, но на самом деле разные.. например:
на host_A:
Cmnd_Alias SHELLS= /usr/bin/bash /usr/sh
на Host_B:
Cmd_Alias SHELLS= /bin/ksh /usr/bin/zsh
идея, которую я должен переименовать cmnd_Alias, добавив имя хоста следующим образом:
Cmnd_Alias HOSTB_SHELLS = /bin/ksh, /usr/bin/zsh
Я могу сделать это с помощью awk:
awk '{if ($1 == "Cmnd_Alias") $2="$hostname_"$2;}1' sudoers
но как я могу также заменить, где команда вызывается или на которую ссылаются..
например
+operator HostB = NOPASSWD: SHELLS
это должно стать:
+operator HostB = NOPASSWD: HOSTB_SHELLS
Я могу отредактировать команду awk, чтобы поместить в экземпляр $2 в переменную, а затем перейти на замену каждого места в файле?
редактировать: я сделал это до сих пор:
#get old name of cmd alias
OLD="$( awk '{if ($1 == "Cmnd_Alias" ) print $2}' sudoers)"
#replace the old alias by the new:
awk '{if ($1 == "Cmnd_Alias" ) $2="$MYHOST_"$2;}1' sudoers > cmd.alias.tmp
#get the new alias name
NEW=$(awk '{if ($1 == "Cmnd_Alias" ) print $2}' cmd.alias.tmp)
#replace
sed /$OLD/s/$OLD/$NEW/ cmd.alias.tmp
Есть ли способ лучше?