1

Я работаю на старой машине Debian 6. У него была старая версия Perl, и некоторые самотестирования вызывали сбой с «Test ::More version 0.96 required». Я скачал последнюю версию Perl 5.22.1, собрал ее из исходников и разместил в /opt/perl/ .

У меня есть скрипт, использующий Perl, и его преамбула:

#!/usr/bin/env perl

Однако, когда я выполняю сценарий, он использует старый Perl вместо нового Perl. Это отчасти ожидается, потому что /usr/bin/env не знает о Perl (или я не верю, что он знает).

Как мне сказать env что Perl находится в /opt/perl/ , а не в /usr/bin/? Если возможно, я бы хотел, чтобы это была конфигурация машины (то есть относится ко всем), а не конфигурация пользователя (то есть относится только ко мне).


Вот справочная страница для env(1) . В этом нет ничего особенного, и я не верю, что речь идет о регистрации новой версии программы для переводчика. Не существует man-страниц для 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 ответ1

2

Как и shell, env использует $PATH для поиска исполняемого файла для простого имени команды. (В отличие от оболочки, он не пытается сначала использовать псевдонимы, функции и встроенные функции.) У меня нет 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .