如何更改 /usr/bin/env 的 Perl 位置

如何更改 /usr/bin/env 的 Perl 位置

我在一台较旧的 Debian 6 机器上工作。它有一个旧版本的 Perl,这导致一些自检失败“需要 Test::More 版本 0.96”。我下载了最新的 Perl 5.22.1,从源代码构建它并将其放在/opt/perl/

我有一个使用 Perl 的脚本,它的序言是:

#!/usr/bin/env perl

但是,当我执行脚本时,它使用的是旧版 Perl,而不是新版 Perl。这是意料之中的,因为我/usr/bin/env不了解 Perl(或者我不相信它了解)。

我如何知道envPerl 是 中的一个/opt/perl/,而不是 中的/usr/bin/一个?如果可能的话,我希望它是一个机器配置(即,适用于所有人),而不是用户配置(即,仅适用于我)。


这是 的手册页env(1)。内容不多,而且我认为它没有讨论为解释器注册程序的新版本。没有env(7)(杂项) 或env(8)(管理) 的手册页。

ENV(1)                           User Commands                          ENV(1)

NAME
       env - run a program in a modified environment

SYNOPSIS
       env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

DESCRIPTION
       Set each NAME to VALUE in the environment and run COMMAND.

       -i, --ignore-environment
              start with an empty environment

       -0, --null
              end each output line with 0 byte rather than newline

       -u, --unset=NAME
              remove variable from the environment

       --help display this help and exit

       --version
              output version information and exit

       A mere - implies -i.  If no COMMAND, print the resulting environment.

AUTHOR
       Written by Richard Mlynarik and David MacKenzie.

...

答案1

像贝壳一样,env 用途$PATH查找简单命令名的可执行文件。(与 shell 不同,它不会首先尝试别名、函数和内置命令。)我手头没有 Debian,但在我的 Ubuntu 14.04(应该没什么不同)上,标准/打包perl位于/usr/bin,没有自定义的测试用户会获得$PATH设置

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

加上默认.profile检查是否$HOME/bin存在,如果存在则将其添加到前面。

/usr/local/*专门用于“特定于我的系统”覆盖和~username/bin“仅限此用户”覆盖,因此其中任何一个中的符号链接都应该有效。或者,您可以在之前放置/opt/perl(或者/opt/perl/bin如果它是这样构造的)。$PATH/usr/bin

相关内容