7

私のセットアップの一部として、私たちの環境では、しばしば使用する必要があります

newgrp voodoo

ファイルに入れようとすると、.bashrc無限ループが発生します。

起動時に同じ機能を自動的にロードする方法はありますか?

4

2 に答える 2

10

bash を起動すると、次の 2 つのスクリプトが開始されます。

  • .bashrcインタラクティブシェル用

  • .bash_profileログインシェル用

newgrpコマンドの実行方法に応じて、そのうちの 1 つが実行されます。

  • newgrp - your_group新しいログインシェルを開始し、読み取ります.bash_profile

  • newgrp your_group(ダッシュなし) は、新しい対話型シェルの読み取りを開始します.bashrc

あるファイルを別のファイルからソースしない場合は、起動スクリプトと newgrp スイッチの適切な組み合わせを選択することで再帰を回避できるはずです

  • newgrp - ....bashrc動作します

  • newgrp ....bash_profile動作します

他の 2 つの組み合わせは、既に説明した再帰につながります。よく見られるように、両方のファイルの一方が他方をソースとしている場合、とにかく問題が発生します。

ところで:.bash_profile存在しない場合、bashは.profile代わりにファイルを読み取ります。一部の専門家はそこからソースを入手することさえできるので、私はそれについて言及し.bashrcます.

どちらの組み合わせもセットアップに当てはまらない場合は、代わりにシェル スクリプトを使用する必要があります。環境変数$GROUPSは、あなたがメンバーであるグループを報告する必要があるため、次のようになります。

[ "$GROUPS" = "200" ] || newgrp your_group

またはブードゥーグループのIDが何であれ役立つかもしれません。

于 2013-03-28T12:24:22.617 に答える
1

You can check the current group id with the command id -gn, then call newgrp only if you aren't in the right group. So your .bashrc could include

# Switch groups, but only if necessary
if [[ `id -gn` != "mygroup" ]]
then
    newgrp mygroup
    exit
fi

Side note, this syntax also works for ksh.

于 2019-12-19T16:06:43.497 に答える