现在我真的对perlbrew
感到困惑...
在perlbrew.pm
中,我看到以下内容:
if ($shell =~ /\/zsh\d?$/) {
$shell_opt = "-d -f";
# <snip>
}
elsif ($shell =~ /\/bash$/) {
$shell_opt = "--noprofile --norc";
}
在AFAICT中,
$shell_opt
的那些设置意味着,至少从zsh
或bash
调用时,perlbrew use ...
会exec
一个新的shell,从而抑制了用户所有rc类型文件的来源。我真的很难想象为什么有人会想要在裸露的 shell 中工作。 我在这里想念什么?
perlbrew
的使用模式是否不同于通过Shell进行的标准交互?还是它根本不适合zsh
或bash
的用户使用?编辑:为了澄清一下,为了让我使用
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 。 ,这在注销之间仍然存在。 perlbrew
无法使用其他环境(例如,尚未提供〜/perl5/perlbrew/etc/bashrc`)。perlbrew
会举起手来,并且会生成一个新的子 shell 。这是当它执行找到的--norc
代码并使用裸 shell 填充其自身环境变量时。 为什么项目要在Senario#2中生成裸露的 shell ?是的,这是一个很好的问题,但是我想得越多,我相信他们就有他们的理由。我目前对此的看法是,
perlbrew
在这一点上正在寻找自己。您的环境(大概由rc配置)无法使用。在病理情况下,可能未设置所需的所有环境变量。无论如何,subshell逻辑都是一种非常安全的方法,可确保perlbrew
可以按需运行。最后一点-如果将
source ~/perl5/perlbrew/etc/bashrc
放入.bash_profile
中意味着创建一个新文件,那么您的.bashrc可能需要从该文件中显式地获取,因为.profile
可能不再这样做: