![修改一个命令的组](https://linux22.com/image/206084/%E4%BF%AE%E6%94%B9%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E7%9A%84%E7%BB%84.png)
我想执行一个命令,并且希望它使用我所属的特定组名执行,但该组不是我的默认组。因此创建的所有文件都将属于该组。有这样的命令吗?
事后还要chgrp
修复它。
然后我发现newgrp
(更改每个登录会话的默认主 GID),但这会创建一个子 shell。因此,onelinernewgroup <groupname> && cmd
不起作用。并且稍后需要关闭外壳。
这两种方法看起来都容易出错。
答案1
该命令sg
可用于此目的。
引用man sg
sg [-] [group [-c ] command]
该sg
命令的工作方式与命令类似,newgrp
但接受命令。该命令将使用 shell 执行/bin/sh
。对于您可能运行的大多数 shell sg
,您需要将多字命令括在引号中。newgrp
和之间的另一个区别sg
是,某些 shell 会进行
newgrp
特殊处理,将其自身替换为创建的 shell 的新实例newgrp
。对于 ,不会发生这种情况sg
,因此退出
sg
命令后,您将返回到之前的组 ID。
如果要更改bash
脚本中多个命令的 GID,请将脚本分成两部分,然后使用参数调用第二个脚本,sg
或者让脚本使用sg
一些参数调用自身,以避免无休止的递归。
在 Python 中,可能还有其他方法来使用setgit
系统调用。