不久前我创建了一些 tmux 会话,从那时起我就被添加到了一些 unix 组中。由于 tmux 服务器在我被添加到组之前已经启动,所以我在 tmux 中创建的所有 shell 都不属于这些组。
在第一个中,他们使用newgrp
打开一个新组的新 shell(如果我们有权限的话)。这不是我想要的,原因有很多:
- 我必须为每个组都做这件事(可能很多)
- 我必须对每个我将要创建的新窗口/窗格执行此操作(可能很多)
- 我无法访问已打开的 shell 上的命令行历史记录(可能很多)
在第二种情况下,他们只是关闭 tmux 服务器。我不想这样做,因为我会丢失所有 shell 历史记录,然后我必须重置所有环境。
有没有办法更新 tmux 服务器的组,并将它们传递给打开的 shell(可能使用神奇的 linux 命令)?
答案1
不可以。进程的凭证不能被外部更改,只能由其自身更改 - 并且如果进程不再具有任意更改其凭证的权限(基本上在您登录时,登录处理程序进程将其权限从“root”降至您自己的 UID),那么它就无法获取任何其他组。
newgrp
或或su
或sg
之类的工具sudo
之所以有效,是因为它们是具有 setuid 位的外部程序(它们以 root 身份启动并基本上从头开始初始化您的凭据)。
使用链接文章中的其他方法之一(例如su
对自己)来获取全部一次分组,然后使用可编写脚本的 tmux CLI 循环遍历所有窗格,向它们发送 shell 命令以将历史记录写入某个唯一文件,调用 su/sg,从该文件重新加载历史记录。