现在我真的对perlbrew感到困惑...

perlbrew.pm中,我看到以下内容:

    if ($shell =~ /\/zsh\d?$/) {
        $shell_opt = "-d -f";
        # <snip>
    }
    elsif  ($shell =~ /\/bash$/)  {
       $shell_opt = "--noprofile --norc";
    }

在AFAICT中,$shell_opt的那些设置意味着,至少从zshbash调用时,perlbrew use ...exec一个新的shell,从而抑制了用户所有rc类型文件的来源。

我真的很难想象为什么有人会想要在裸露的 shell 中工作。 我在这里想念什么? perlbrew的使用模式是否不同于通过Shell进行的标准交互?还是它根本不适合zshbash的用户使用?

编辑:为了澄清一下,为了让我使用perl安装的perlbrew之一,我必须运行类似
% perlbrew use perl-5.16.3

这样做时,上面显示的代码将运行,结果perlbrew exec是一个新的shell,没有rc文件。如果没有我通常的rc文件,我看不到在shell实例中工作的意义。

最佳答案

我遇到了同样的问题,运行perlbrew switch ...产生了一个裸bash shell。但是我发现这是因为它是在安装Perlbrew的同一 session 中进行的。尽管我已将其添加到.bash_profile中,但是我没有在当前shell中获得~/perl5/perlbrew/etc/bashrc的资源。 (旁注:使用screen会激怒,因此我的 session 在断开连接之间仍然存在。)

据我所知,perlbrew区分两种情况:

  • 它已经具有所需的环境;也就是说,您已获取~/perl5/perlbrew/etc/bashrc
  • 在这种情况下,perlbrew switch ...自动将perl指向指定的版本。 没有产生任何子 shell 。 ,这在注销之间仍然存在。
  • 您的 shell 裸露,或者perlbrew无法使用其他环境(例如,尚未提供〜/perl5/perlbrew/etc/bashrc`)。
  • 由于它无法在当前环境中运行,因此perlbrew会举起手来,并且会生成一个新的子 shell 。这是当它执行找到的--norc代码并使用裸 shell 填充其自身环境变量时。
  • 请注意,这种情况也可能发生在脚本中。有关更多信息,请参见Perlbrew in Shell Scripts

  • 为什么项目要在Senario#2中生成裸露的 shell ?是的,这是一个很好的问题,但是我想得越多,我相信他们就有他们的理由。我目前对此的看法是,perlbrew在这一点上正在寻找自己。您的环境(大概由rc配置)无法使用。在病理情况下,可能未设置所需的所有环境变量。无论如何,subshel​​l逻辑都是一种非常安全的方法,可确保perlbrew可以按需运行。

    最后一点-如果将source ~/perl5/perlbrew/etc/bashrc放入.bash_profile中意味着创建一个新文件,那么您的.bashrc可能需要从该文件中显式地获取,因为.profile可能不再这样做:

    10-07 22:28