bash - 如何将 perlbrew 与 zsh 或 bash 一起使用?

标签 bash perl zsh perlbrew

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

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

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

AFAICT,$shell_opt 的那些设置意味着,至少如果从 zshbash 调用,perlbrew 使用 .. .执行一个新的 shell,抑制所有用户的 rc 类型文件的来源。

我真的很难想象为什么任何人 都想在裸机中工作。 我在这里遗漏了什么?perlbrew 是否意味着不同于通过 shell 进行的标准交互的使用模式?或者它根本不适合 zshbash 的用户?

编辑: 澄清一下,为了让我使用 perlbrew 安装的 perl 之一,我必须运行像

% 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 区分两种情况:

  1. 它已经具备了它所需要的环境;即,您已经获取了 ~/perl5/perlbrew/etc/bashrc

    • 在这种情况下,perlbrew switch ... 自动将 perl 指向指定的版本。 没有生成子 shell。这在注销之间持续存在。
  2. 您有一个裸壳,或者 perlbrew 无法使用的环境(例如,~/perl5/perlbrew/etc/bashrc` 尚未获取)。

    • 由于它不能在当前环境中运行,perlbrew 举起手来,生成一个新的子 shell。这是当它执行您找到的 --norc 代码时,并使用一个裸壳,它在其中填充自己的环境变量。
    • 请注意,这种情况也可能发生在脚本中。参见 Perlbrew in Shell Scripts了解更多信息。

为什么该项目要在 Senario #2 中生成一个裸壳?是的,这是一个很好的问题,但我想得越多,我相信他们有他们的理由。我目前对此的看法是 perlbrew 在这一点上正在寻找自己。您的环境(可能是由您的 rc 配置的)无法使用。在病态的情况下,它可能会取消设置它需要的所有环境变量。无论如何,子 shell 逻辑是确保 perlbrew 将按需要运行的非常可靠的方法。

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

$ head -3 .profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

关于bash - 如何将 perlbrew 与 zsh 或 bash 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16136735/

相关文章:

bash - 在 Ubuntu 的 Zsh 中减少颜色

bash - 创建带有校验和验证的文件下载脚本

linux - 如何从 Unix/Linux 中的文件名中删除模式

Perl 变量范围似乎不合作

python - 如何集成 ZSH 和 (i)python?

python-3.x - Mac OS Catalina 全新安装时出现 pip3 和 Pipenv 问题

bash - 检查进程是否正在运行,如果没有,使用 Cron 重新启动它

linux - 用/在搜索字符串中替换 bash 文件中的文本

javascript - 如何在 Perl 中运行网页的 Javascript?

algorithm - 如何在 Perl 中创建循环链表而不使用数组?