1. รับเชลล์กับกลุ่มใหม่โดยไม่ต้องออกจากระบบและเข้าใหม่อีกครั้ง
หากคุณเพิ่มเพียงหนึ่งกลุ่มฉันจะใช้สิ่งต่อไปนี้:
exec sg <new group name> newgrp `id -gn`
นี่คือรูปแบบที่หลากหลายของเล่ห์เหลี่ยมเลเยอร์ใหม่ของเลโก้คูลาส แต่มันอยู่ในบรรทัดเดียวและคุณไม่จำเป็นต้องป้อนกลุ่มหลักของคุณด้วยตนเอง
sg
เป็น newgrp แต่การยอมรับคำสั่งให้ดำเนินการด้วย ID กลุ่มใหม่ exec
หมายความว่าเปลือกใหม่แทนที่เปลือกที่มีอยู่เพื่อให้คุณไม่จำเป็นต้อง "ออกจากระบบ" สองครั้ง
ซึ่งแตกต่างจากการใช้ su คุณไม่จำเป็นต้องพิมพ์รหัสผ่านของคุณ นอกจากนี้ยังไม่รีเฟรชสภาพแวดล้อมของคุณ (นอกเหนือจากการเพิ่มกลุ่ม) ดังนั้นคุณเก็บไดเรกทอรีการทำงานปัจจุบันของคุณ ฯลฯ
2. การดำเนินการคำสั่งในหน้าต่างหน้าจอทั้งหมดในเซสชัน
at
คำสั่งในหน้าจอรันคำสั่งในหน้าต่างของสิ่งที่คุณระบุ (ทราบว่านี่เป็นคำสั่งที่หน้าจอไม่ได้เป็นคำสั่งของเชลล์บริการ)
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อส่งคำสั่งไปยังเซสชันหน้าจอที่มีอยู่ทั้งหมด:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
สังเกตความจำเป็นที่จะต้องหนี backticks เพื่อid
ให้ทำงานในเซสชันของหน้าจอและ ^ M เพื่อให้หน้าจอกด 'Enter' ที่ท้ายคำสั่งของคุณ
โปรดทราบว่าstuff
คำสั่งของหน้าจอเพียงพิมพ์ข้อความคำสั่งในนามของคุณ ดังนั้นสิ่งที่แปลกอาจเกิดขึ้นได้หากหน้าต่างหน้าจอใดหน้าจอหนึ่งมีคำสั่งแบบครึ่งคำสั่งที่พรอมต์คำสั่งหรือกำลังเรียกใช้แอปพลิเคชันอื่นที่ไม่ใช่เชลล์ (เช่น emacs, top) หากเป็นปัญหาฉันมีความคิด:
- ในการกำจัดคำสั่งครึ่งตัวใด ๆ คุณสามารถเพิ่ม "^ C" ลงในจุดเริ่มต้นของคำสั่ง
- เพื่อหลีกเลี่ยงการรันคำสั่งในหน้าต่าง emacs ฯลฯ คุณสามารถขอ `at 'เพื่อกรองชื่อหน้าต่าง ฯลฯ (ในตัวอย่างข้างต้นฉันใช้" # "ซึ่งตรงกับ windows ทั้งหมด แต่คุณสามารถกรองตามชื่อหน้าต่างผู้ใช้ ฯลฯ )
ในการรันคำสั่งในหน้าต่างที่ระบุ (ระบุด้วยหมายเลขหน้าต่าง) ให้ใช้คำสั่งต่อไปนี้:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"