Score:0

ใช้ awk เพื่อต่อท้ายข้อความท้ายบรรทัดใน /etc/group

ธง fr

ฉันกำลังเขียนสคริปต์เพื่อทำงานบางอย่างโดยอัตโนมัติ และฉันต้องเพิ่มผู้ใช้ลงในกลุ่มใน /etc/group ฉันพยายามใช้คำสั่งนี้:

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

ปัญหาที่ฉันพบคือฉันได้รับ

awk: cmd บรรทัด:1: {ถ้า (/^moli/) {-bash=-bashtestuser1,}; พิมพ์
awk: cmd บรรทัด: 1: ^ ข้อผิดพลาดทางไวยากรณ์
awk: cmd บรรทัด:1: {ถ้า (/^moli/) {-bash=-bashtestuser1,}; พิมพ์
awk: cmd บรรทัด:1: ^ บรรทัดใหม่หรือจุดสิ้นสุดของสตริงที่ไม่คาดคิด

ถ้าฉันเปลี่ยน ' ' ถึง "" ฉันเข้าใจ: -bash: ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด '('

pLumo avatar
in flag
ความหมายของการใช้ `bash -c` ที่นี่คืออะไร? คุณทำ `awk ... | sudo ที /etc/group` ? อย่างไรก็ตาม ฉันขอแนะนำอย่างยิ่งว่าอย่าแก้ไขไฟล์ `/etc/group` ด้วยตนเอง หากคุณทำอะไรผิด คุณอาจล็อกตัวเองออกจากระบบได้ อย่างน้อยที่สุดที่คุณต้องทำคือสำรองไฟล์ นอกจากนี้ `$uservar` คืออะไร ดูเหมือนว่าคุณต้องการใช้ `sudo sed -i ...`
pLumo avatar
in flag
อย่าแก้ไข `/ etc / group` ด้วยตนเอง! ใช้คำสั่ง `usermod` แทน ดู[ที่นี่](https://askubuntu.com/questions/79565/how-to-add-existing-user-to-an-existing-group)
TL_Arwen avatar
fr flag
ฉันลองใช้ `usermod -a -G moli ชื่อผู้ใช้` เป็นการทดสอบ ฉันตรวจสอบเพื่อดูว่าผู้ใช้ปรากฏตัวใน /etc/group หรือไม่ แต่พวกเขาไม่ได้อยู่ที่นั่น
pLumo avatar
in flag
คุณอาจต้องออกจากระบบ/เข้าสู่ระบบเพื่อดูการเปลี่ยนแปลงที่ฉันเดา ซึ่งเขียนไว้ในคำตอบจากลิงก์ ;-)
TL_Arwen avatar
fr flag
มันไม่แสดงใน /etc/groups แต่ถ้าฉันเรียกใช้ `groups username` มันจะแสดงที่นั่น
Score:1
ธง in

มีปัญหามากมายในรหัสขนาดเล็กของคุณ:

  • อัญประกาศเดี่ยวภายในอัญประกาศคู่ไม่ป้องกันการแทนที่ตัวแปร
    ดังนั้น, $0 ขยายเป็น /ถัง/ทุบตี. ดู ที่นี่.

  • คุณโชคดีจริง ๆ ที่คำสั่งของคุณล้มเหลว !! หากใช้งานได้จะทำให้ข้อมูลของคุณว่างเปล่า /etc/group ไฟล์และคุณจะมีปัญหาร้ายแรง
    ในขณะที่คุณออก คำสั่ง > ไฟล์, ไฟล์ ถูกเปิดและว่างเปล่าสำหรับการเขียนและของคุณ สั่งการ จะเห็นไฟล์ว่าง

    ใช้ดีกว่า > file.temp && ไฟล์ mv file.temp หรือ awk - ฉันแทนที่ ....

  • แทนที่จะเพิ่ม ทุบตี ตัวแปรโดยตรงใน อึดอัด รหัส, ใช้ awk -v var=$var ตัวเลือกและการใช้งาน วาร์ ข้างใน อึดอัด.


แล้วจะทำอย่างไร ?

คุณไม่จำเป็นต้องอ้างถึงนรกที่ซ้ำกันนี้ คุณสามารถใช้:

sudo awk -i แทนที่ไฟล์ '...'

หรือ

awk '...' ไฟล์ | sudo tee file.temp && ไฟล์ sudo mv file.temp

หรือสำหรับกรณีของคุณเหมาะกว่า เสด:

sudo sed -i '...' ไฟล์

อย่างไรก็ตามคุณไม่ควรเปลี่ยน /etc/group ด้วยตนเองเลย

เพิ่มผู้ใช้ด้วย ม็อดผู้ใช้ (ตามที่แนะนำ ที่นี่):

sudo usermod -a -G groupName ชื่อผู้ใช้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา