1.使用新组的外壳,而无需注销和再次登录
如果您仅添加一个组,则使用以下命令:
exec sg <new group name> newgrp `id -gn`
这是对Legooolas的两层newgrp技巧的一种变体,但是它只是一行,不需要您手动输入主要组。
sg
是newgrp,但接受使用新组ID执行的命令。这exec
意味着新外壳将替换现有外壳,因此您无需两次“注销”。
与使用su不同,您无需输入密码。它还不会刷新您的环境(除了添加组之外),因此您保留了当前的工作目录等。
2.在会话的所有“屏幕”窗口中执行命令
将at
在屏幕命令运行你指定的任何窗口(注意这是一个屏幕的命令,而不是一个shell命令)的命令。
您可以使用以下命令将命令发送到所有现有的Screen会话:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
请注意,需要避免反引号以id
在Screen会话中运行,而^ M则使Screen在命令末尾命中“ enter”。
还要注意,屏幕的stuff
命令只是代表您键入命令文本。因此,如果其中一个屏幕窗口在命令提示符下具有半写命令或正在运行除外壳程序以外的应用程序(例如emacs,top),则可能会发生奇怪的事情。如果这是一个问题,我有一些想法:
- 要摆脱任何半写命令,可以在命令开头添加“ ^ C”。
- 为了避免在emacs窗口等中运行命令,您可以要求`at'过滤窗口标题等(在上面的示例中,我使用“#”,它匹配所有窗口,但是您可以按窗口标题,用户进行过滤等)。
要在特定窗口(由窗口号标识)中运行命令,请使用以下命令:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"