Puncte:0

Folosind awk pentru a adăuga text la sfârșitul unei linii în /etc/group

drapel fr

Scriu un script pentru a automatiza unele sarcini și trebuie să adaug un utilizator la un grup în /etc/group. Încerc să folosesc această comandă:

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

Problema cu care mă confrunt este că înțeleg

awk: cmd. line:1: {dacă (/^moli/) {-bash=-bashtestuser1,}; imprimare
awk: cmd. line:1: ^ eroare de sintaxă
awk: cmd. line:1: {dacă (/^moli/) {-bash=-bashtestuser1,}; imprimare
awk: cmd. line:1: ^ linie nouă neașteptată sau sfârșit de șir

Dacă schimb ' ' la "" Eu iau: -bash: eroare de sintaxă lângă simbolul neașteptat „(”

pLumo avatar
drapel in
Care este sensul folosirii `bash -c` aici? Nu poți să faci doar `awk... | sudo tee /etc/group` ? Cu toate acestea, aș sugera cu tărie să nu editați manual fișierul `/etc/group`. Dacă faci ceva greșit, s-ar putea să te blochezi din sistemul tău. Cel puțin trebuie să faci este să faci o copie de rezervă a fișierului. De asemenea, ce este `$uservar`? Se pare că mai degrabă vrei să folosești `sudo sed -i ...`
pLumo avatar
drapel in
Nu editați manual `/etc/group`! Mai degrabă folosiți comanda `usermod`. Vezi [aici](https://askubuntu.com/questions/79565/how-to-add-existing-user-to-an-existing-group).
TL_Arwen avatar
drapel fr
Am încercat `usermod -a -G moli username` ca test. Am verificat să văd dacă utilizatorul a apărut în /etc/group, dar nu sunt acolo.
pLumo avatar
drapel in
S-ar putea să fie nevoie să vă deconectați/autentificați pentru a vedea modificările, cred, care este scris și în răspunsul de la link ;-)
TL_Arwen avatar
drapel fr
Nu apare în /etc/groups, dar dacă rulez `groups username` apare acolo.
Puncte:1
drapel in

Există o mulțime de probleme în codul tău mic:

  • Ghilimele simple din ghilimele duble nu împiedică înlocuirea variabilelor.
    Asa de, $0 se extinde la /bin/bash. Vedea Aici.

  • De fapt, ești foarte norocos că comanda ta a eșuat!! Dacă funcționa, ți-ar fi golit /etc/group dosar si ai avea probleme serioase.
    În momentul în care emiteți comandă > fișier, fişier se deschide și se golește pentru scris, iar dvs comanda va vedea un fișier gol.

    Utilizare mai bună > fișier.temp și& mv fișier.temp sau awk -am inlocuit....

  • În loc să adauge bash variabile direct în awk cod, folosire awk -v var=$var opțiune și utilizare var interior awk.


Deci ce să fac ?

Nu aveți nevoie de acest duplicat citat iad, puteți folosi pur și simplu:

sudo awk -i inlocuieste fisierul '...'

sau

awk '...' fisier | sudo tee file.temp && sudo mv file.temp fişier

sau pentru cazul tău, cu atât mai potrivit sed:

sudo sed -i '...' fişier

in orice caz, nu ar trebui să te schimbi /etc/group manual deloc.

Adăugați un utilizator cu usermod (după cum se sugerează Aici):

sudo usermod -a -G groupName userName

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.