Я пишу скрипт для автоматизации некоторых задач, и мне нужно добавить пользователя в группу в / etc / group. Я пытаюсь использовать эту команду:
sudo bash -c "awk '{if (/^moli/) {$0=$0"$uservar,"}; print' /etc/group > /etc/group"
Проблема, с которой я столкнулся, - это
awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: {if (/^moli/) {-bash=-bashtestuser1,}; print
awk: cmd. line:1: ^ unexpected newline or end of string
Если я изменю ''
до ""
Я получаю: -bash: синтаксическая ошибка рядом с неожиданным токеном '('
В вашем небольшом коде много проблем:
Одиночные кавычки внутри двойных кавычек не препятствуют подстановке переменных.
Итак, $ 0
заменяется на / bin / bash
. См. здесь .
Вам действительно повезло, что ваша команда не удалась !! Если бы он работал, он бы очистил ваш файл / etc / group
, и у вас были бы серьезные проблемы.
В тот момент, когда вы вводите command> file
, файл
открывается и очищается для записи, а ваша команда
будет видеть пустую файл.
Лучше использовать > file.temp && mv file.temp file
или awk -i inplace ...
.
Вместо добавления переменных bash
непосредственно в код awk
используйте параметр awk -v var = $ var
и используйте внутри var
awk
.
Итак, что делать?
Вам не нужен этот адский дубликат цитирования, вы можете просто использовать:
sudo awk -i inplace '...' file
или
awk '...' file | sudo tee file.temp && sudo mv file.temp file
или, в вашем случае, более подходящий sed
:
sudo sed -i '...' file
Однако вам вообще не следует изменять / etc / group
вручную.
Добавьте пользователя с помощью usermod
(как предлагается здесь ):
sudo usermod -a -G groupName userName