Is it possible to have a bashrc for a usergroup?
In /etc/profile
, add:
if [ "$(id -ng)" = "the_cool_group" ]; then
# do stuff for people in the_cool_group
fi
/etc/profile
is seen by all users. ~/.profile
is seen by the one user logging in: it's a file in the user's home directory, and each user has their own directory; the login program sets the environment variable HOME
to the path of the user's home directory. The same goes for other files such as /etc/bash.bashrc
and ~/.bashrc
— many applications have a system-wide configuration file under /etc
and a per-user configuration file in the user's home directory.
There is no similar mechanism for groups — groups don't have a home directory. Thus there is no straightforward way to apply a configuration file to all users in a group.
As other answers have shown, you can add commands in a system-wide shell initialization file inside a conditional statement to run them only when the user belongs to a particular group. Note that a user can belong to more than one group. It's up to you to decide whether you want to run commands only when the group is the user's primary group or whenever the user belongs to the group.
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
On the difference between .profile
and .bashrc
, see Is there a ".bashrc" equivalent file read by all shells?
You could add something like this to /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
Then you can create a /etc/bashrc-by-group/mygroup
and put the initialisations for the members of the mygroup
group in there.
That assumes your groups are well tamed: that the group names don't contain blank, slash or wildcard characters, that they're not .
or ..
, and that you have a one-to-one mapping between group name and group id. If not, you can use id -G
instead of id -Gn
and use /etc/bashrc-by-group/groupid
.