是否可以为用户组提供 bashrc?

是否可以为用户组提供 bashrc?

是否可以为组中的所有用户执行某些 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文件本身更干净。

相关内容