Files

在 shell 中更改組

  • September 9, 2016

很簡單。我有使用者 foo。foo 屬於 foo (main)、audio、A、B 和common組。

通常文件是使用所有權 foo.foo 創建的。

有一段時間我想 foo 用組common創建文件。基本上我是這樣看的:

Cache present group
Change group to *common*
Touch alpha
Touch beta 
...
Change group back.

alpha beta(和之後的任何東西)應該用所有者 foo 創建。常見的。我怎樣才能做到這一點?

PS:哎呀。忘了說我想在 bash 和 zsh 中都這樣做。

bash 和 zsh 都沒有這個功能。

你可以打電話newgrp。這是一個外部命令,它啟動一個新程序。它執行由SHELL環境變數指示的程序,不帶參數。

newgrp common <<EOS
touch alpha beta
EOS
touch belongs_to_original_group

請注意,由於newgrp啟動了一個新的 shell,它不會從原始 shell 的 shell 變數繼承,而只能從環境(導出的)變數繼承。在那裡執行的任何分配都只會在那裡生效。

為此,請使用以下newgrp命令:

newgrp common
touch whatever
newgrp foo

由於您是這兩個組的成員(並且可能沒有為這些組使用密碼),因此您應該能夠輕鬆切換。實際上,每次呼叫newgrp都會創建一個子shell。您可以檢查您正在使用的“誰” id。您是從 shell 退出(並恢復上一個組)還是創建新的子 shell,取決於您想要做什麼。

與一些相關命令不同,這個命令是在POSIX中:

newgrp 實用程序應使用新的真實有效的組標識創建一個新的 shell 執行環境。

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