7

作为我设置的一部分,我经常需要在我们的环境中使用

newgrp voodoo

如果我尝试将其放入.bashrc文件中,则会出现无限循环。

任何想法如何在启动时自动加载相同的功能?

4

2 回答 2

10

启动 bash 后,将启动 2 个脚本:

  • .bashrc用于交互式外壳

  • .bash_profile用于登录外壳

根据您运行newgrp命令的方式,其中之一将被执行:

  • newgrp - your_group将启动一个新的登录 shell 并因此读取.bash_profile

  • newgrp your_group没有破折号)将开始一个新的交互式 shell 阅读.bashrc

如果您不从另一个文件中获取一个文件,您应该能够通过选择启动脚本和 newgrp 开关的正确组合来规避递归

  • newgrp - ....bashrc将工作

  • newgrp ....bash_profile将工作

其他两种组合将导致您已经描述的递归。如果两个文件中的一个像经常看到的那样来自另一个文件,那么无论如何您都会遇到麻烦。

顺便说一句:如果.bash_profile不存在 bash 将改为读取文件.profile。我只是提到它,因为一些专家甚至设法.bashrc从那里采购。

如果这两种组合都不适用于您的设置,则您可能不得不求助于 shell 脚本。环境变量$GROUPS应该报告您所属的组,例如:

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

或者您的巫毒教团体的 id 可能会有所帮助。

于 2013-03-28T12:24:22.617 回答
1

您可以使用命令检查当前组 id id -gn,然后newgrp仅在您不在正确组中时才调用。所以你.bashrc可以包括

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

旁注,此语法也适用于 ksh。

于 2019-12-19T16:06:43.497 回答