Рейтинг:0

Использование awk для добавления текста в конец строки в /etc/group

флаг fr

Я пишу скрипт для автоматизации некоторых задач, и мне нужно добавить пользователя в группу в /etc/group. Я пытаюсь использовать эту команду:

sudo bash -c "awk '{if (/^moli/) {$0=$0"$uservar,"}; print' /etc/group > /etc/group"

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю

авк: команд. строка: 1: {if (/^moli/) {-bash=-bashtestuser1,}; Распечатать
авк: команд. строка: 1: ^ синтаксическая ошибка
авк: команд. строка: 1: {if (/^moli/) {-bash=-bashtestuser1,}; Распечатать
авк: команд. строка: 1: ^ неожиданный перевод строки или конец строки

Если я изменю ' ' к "" Я получил: -bash: синтаксическая ошибка рядом с неожиданным токеном '('

pLumo avatar
флаг in
Какой смысл использовать здесь `bash -c`? Разве вы не можете просто сделать `awk ... | sudo тройник /etc/group` ? Однако я настоятельно рекомендую не редактировать файл `/etc/group` вручную. Если вы сделаете что-то не так, вы можете заблокировать себя из своей системы. Минимум, что вам нужно сделать, это сделать резервную копию файла. Кроме того, что такое `$uservar`? Кажется, вы хотите использовать `sudo sed -i ...`
pLumo avatar
флаг in
Не редактируйте `/etc/group` вручную! Лучше используйте команду `usermod`. См. [здесь] (https://askubuntu.com/questions/79565/how-to-add-existing-user-to-an-existing-group).
TL_Arwen avatar
флаг fr
Я попробовал `usermod -a -G moli username` в качестве теста. Я проверил, появился ли пользователь в /etc/group, но его там нет.
pLumo avatar
флаг in
Возможно, вам придется выйти из системы / войти в систему, чтобы увидеть изменения, которые, я думаю, также написаны в ответе по ссылке ;-)
TL_Arwen avatar
флаг fr
Он не отображается в /etc/groups, но если я запускаю `groups username`, он отображается там.
Рейтинг:1
флаг in

В вашем маленьком коде много проблем:

  • Одинарные кавычки внутри двойных кавычек не препятствуют подстановке переменных.
    Так, $0 расширяется до /бин/баш. Видеть здесь.

  • Вам на самом деле очень повезло, что ваша команда не удалась!! Если бы он работал, он бы опустошил ваш /и т.д./группа файл, и у вас будут серьезные проблемы.
    В тот момент, когда вы выпускаете команда > файл, файл открывается и очищается для записи, и ваш команда увидит пустой файл.

    Лучшее использование > file.temp && mv file.temp файл или же awk -я на месте....

  • Вместо добавления бить переменные непосредственно в аук код, использовать awk -v вар=$вар вариант и использование вар внутри аук.


Так что делать ?

Вам не нужен этот дублирующий ад цитирования, вы можете просто использовать:

sudo awk -i вместо файла '...'

или же

awk '...' файл | sudo tee file.temp && sudo mv file.temp файл

или для вашего случая лучше подходит сед:

sudo sed -i '...' файл

Однако, вы не должны изменять /и т.д./группа вообще вручную.

Добавьте пользователя с пользовательский мод (как было предложено здесь):

sudo usermod -a -G имя_группы имя_пользователя

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.