Linux

為一個命令修改組

  • May 20, 2022

我想執行一個命令,並且我希望它使用我所屬的特定組名執行,但這不是我的預設組。所以創建的所有文件都屬於該組。有這個命令嗎?

之後有chgrp修復它。

然後我發現newgrp為每個登錄會話更改我的預設主 GID),但這會創建一個子外殼。因此,onelinernewgroup <groupname> && cmd不起作用。並且外殼需要稍後關閉。

這兩種方法看起來都容易出錯。

該命令sg可用於此目的。

引用man sg

sg [-] [group [-c ] command]

sg命令的工作方式類似於newgrp但接受命令。該命令將使用/bin/shshell 執行。對於您可能執行的大多數 shell sg,您需要將多字命令括在引號中。newgrp和之間的另一個區別sg是,某些 shell 會進行 newgrp特殊處理,將自己替換為newgrp創建的 shell 的新實例。不會發生這種情況sg,因此在退出 sg命令後,您將返回到之前的組 ID。


如果要更改腳本中多個命令的 GID bash,請將腳本一分為二,然後呼叫第二個腳本,sg或者讓腳本呼叫自身,sg並使用一些參數來避免無休止的遞歸。

在 Python 中,可能還有其他使用setgit系統呼叫的方法。

引用自:https://unix.stackexchange.com/questions/703302