グループ内のすべてのユーザーに対して特定の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
ホームディレクトリの下にユーザー固有の設定ファイルがあります。
グループには同様のメカニズムはありません。グループにホームディレクトリはありません。したがって、グループ内のすべてのユーザーにプロファイルを適用する直接的な方法はありません。
他の答えが示すように、条件文内のシステム全体のシェル初期化ファイルにコマンドを追加して、ユーザーが特定のグループに属している場合にのみ実行できるようにすることができます。ユーザーは複数のグループに所属できます。グループがユーザーのデフォルトグループであるか、ユーザーがそのグループに属するたびにコマンドを実行するのはユーザーの役割です。
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
以下を参照してください。すべてのシェルが読める「.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
その後、1つを作成し、そこに/etc/bashrc-by-group/mygroup
グループメンバーシップの初期化を入れることができますmygroup
。
グループがよく飼いならされているとします。グループ名にはスペース、スラッシュ、またはワイルドカードは含まれておらず、.
ORでもなく、..
グループ名とグループIDの間に1対1のマッピングがあります。そうでない場合は、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
ファイル自体を変更するよりもきれいにすることができます。