是否可以为组中的所有用户执行某些 bashrc 文件?如果您可以在 /etc/profile 中在系统范围内执行此操作,那么为什么不针对用户组执行此操作呢?
答案1
在 中/etc/profile
,添加:
if [ "$(id -ng)" = "the_cool_group" ]; then
# do stuff for people in the_cool_group
fi
答案2
/etc/profile
所有用户都可以看到。~/.profile
被登录的一个用户看到:它是用户主目录中的一个文件,每个用户都有自己的目录;登录程序将环境变量设置HOME
为用户主目录的路径。对于其他文件(例如/etc/bash.bashrc
和)也是如此~/.bashrc
— 许多应用程序在用户的主目录下都有一个系统范围的配置文件/etc
,并在用户的主目录下有一个每个用户的配置文件。
组没有类似的机制——组没有主目录。因此,没有直接的方法将配置文件应用于组中的所有用户。
正如其他答案所示,您可以在条件语句内的系统范围 shell 初始化文件中添加命令,以便仅当用户属于特定组时才运行它们。请注意,一个用户可以属于多个组。由您决定是仅当组是用户的主要组时还是每当用户属于该组时才运行命令。
case "$(id -gn)" in
foo) somecommand;; # the user's primary group is foo
esac
case ":$(id -Gn | tr \\n :)" in
*:foo:*) somecommand;; # the user belongs to the group foo
esac
.profile
关于和之间的区别.bashrc
,请参见是否有一个所有 shell 都能读取的“.bashrc”等效文件?
答案3
你可以添加这样的东西/etc/bash.bashrc
:
# running group-based bashrcs
for group in $(id -Gn); do
group_bashrc=/etc/bashrc-by-group/$group
if [ -f "$group_bashrc" ] && [ -r "$group_bashrc" ]; then
command . "$group_bashrc"
fi
done
然后您可以创建一个/etc/bashrc-by-group/mygroup
并将组成员的初始化mygroup
放在那里。
假设您的组被很好地驯服:组名称不包含空白、斜杠或通配符,它们不是.
或..
,并且组名称和组 id 之间有一对一的映射。如果没有,您可以使用id -G
代替id -Gn
并使用/etc/bashrc-by-group/groupid
。
答案4
您还可以添加到/etc/profile.d/yourscript.sh
:
echo " $(groups) "|fgrep -q ' group '
if [ $? = 0 ] ; then
test -r /path/.group_profile && source /path/.group_profile
fi
这可能比更改profile
文件本身更干净。