ユーザーグループに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ホームディレクトリの下にユーザー固有の設定ファイルがあります。

グループには同様のメカニズムはありません。グループにホームディレクトリはありません。したがって、グループ内のすべてのユーザーにプロファイルを適用する直接的な方法はありません。

他の答えが示すように、条件文内のシステム全体のシェル初期化ファイルにコマンドを追加して、ユーザーが特定のグループに属している場合にのみ実行できるようにすることができます。ユーザーは複数のグループに所属できます。グループがユーザーのデフォルトグループであるか、ユーザーがそのグループに属するたびにコマンドを実行するのはユーザーの役割です。

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ファイル自体を変更するよりもきれいにすることができます。

関連情報