修改一个命令的组

修改一个命令的组

我想执行一个命令,并且希望它使用我所属的特定组名执行,但该组不是我的默认组。因此创建的所有文件都将属于该组。有这样的命令吗?

事后还要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系统调用。

相关内容