1. Nhận shell với nhóm mới mà không cần đăng xuất và đăng nhập lại
Nếu bạn chỉ thêm một nhóm, tôi đã sử dụng như sau:
exec sg <new group name> newgrp `id -gn`
Đây là một biến thể của thủ thuật newgrp hai lớp của Legooolas, nhưng nó nằm trong một dòng và không yêu cầu bạn phải nhập thủ công nhóm chính của mình.
sg
là newgrp nhưng chấp nhận lệnh để thực thi với ID nhóm mới. Có exec
nghĩa là lớp vỏ mới thay thế lớp vỏ hiện có, vì vậy bạn không cần phải "đăng xuất" hai lần.
Không giống như sử dụng su, bạn không cần nhập mật khẩu của mình. Nó cũng không làm mới môi trường của bạn (ngoài việc thêm nhóm), vì vậy bạn giữ lại thư mục làm việc hiện tại của mình, v.v.
2. Thực hiện lệnh trong tất cả các cửa sổ Màn hình trong một phiên
Các at
lệnh trong màn hình chạy một lệnh trong bất cứ cửa sổ bạn chỉ định (lưu ý đây là một lệnh màn hình, không phải là một lệnh shell).
Bạn có thể sử dụng lệnh sau để gửi lệnh tới tất cả các phiên Màn hình hiện có:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
Lưu ý rằng cần phải thoát các backticks để id
chạy trong phiên Màn hình và ^ M để có được Màn hình để nhấn 'enter' ở cuối lệnh của bạn.
Cũng lưu ý rằng stuff
lệnh của màn hình chỉ cần nhập văn bản lệnh thay mặt bạn. Do đó, điều gì đó kỳ lạ có thể xảy ra nếu một trong các cửa sổ màn hình có lệnh được viết một nửa tại dấu nhắc lệnh hoặc đang chạy một ứng dụng không phải là trình bao (ví dụ: emacs, trên cùng). Nếu đây là một vấn đề, tôi có một số ý tưởng:
- Để loại bỏ bất kỳ lệnh nửa viết nào, bạn có thể thêm "^ C" vào đầu lệnh.
- Để tránh chạy lệnh trong cửa sổ emacs, v.v., bạn có thể yêu cầu 'at' để lọc tiêu đề cửa sổ, v.v. , Vân vân).
Để chạy lệnh trong một cửa sổ cụ thể (được xác định bởi số cửa sổ), sử dụng như sau:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"