Ich arbeite an einer älteren Debian 6-Maschine. Es hatte eine alte Version von Perl und führte dazu, dass einige Selbsttests fehlschlugen "Test :: More Version 0.96 erforderlich" . Ich habe die neueste Version von Perl 5.22.1 heruntergeladen, sie aus Quellen erstellt und bei abgelegt /opt/perl/
.
Ich habe ein Skript, das Perl verwendet, und seine Präambel lautet:
#!/usr/bin/env perl
Wenn ich das Skript ausführe, wird jedoch das alte Perl anstelle des neuen Perl verwendet. Das wird irgendwie erwartet, weil /usr/bin/env
kennt Perl nicht (oder glaube ich nicht).
Wie erzähle ich env
das Perl ist derjenige in /opt/perl/
, und nicht /usr/bin/
? Wenn möglich, möchte ich, dass es sich um eine Maschinenkonfiguration handelt (d. H. Für alle) und nicht um eine Benutzerkonfiguration (d. H. Nur für mich).
Hier ist die Manpage für env(1)
. Es ist nicht viel dabei und ich glaube nicht, dass es darum geht, eine neue Version eines Programms für einen Interpreter zu registrieren. Es gibt keine Manpages für env(7)
(Sonstiges) oder env(8)
(Verwaltung).
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.
...
Antworten:
Wie eine Muschel,
env
Verwendet$PATH
um die ausführbare Datei für einen einfachen Befehlsnamen zu finden. (Anders als in der Shell werden Aliase, Funktionen und Builtins nicht zuerst getestet.) Ich habe Debian nicht zur Hand, aber auf meinem Ubuntu 14.04 (das sollte nicht viel anders sein) Standard / Paketperl
ist in/usr/bin
und ein Testbenutzer ohne Anpassung erhält eine$PATH
Einstellung vonplus die Standardeinstellung
.profile
prüft ob$HOME/bin
existiert und wenn ja fügt es an der Front hinzu./usr/local/*
ist genau für "systemspezifische" Overrides gedacht und~username/bin
Wenn "nur dieser Benutzer" überschreibt, sollte ein Symlink in einem von ihnen funktionieren. Alternativ könnte man setzen/opt/perl
(oder vielleicht/opt/perl/bin
wenn es so strukturiert ist) in deinem$PATH
vor/usr/bin
.quelle
/usr/local/\*
ist genau für "systemspezifische" Overrides gedacht ... - Das Problem hier ist, dass Perl das Verzeichnis verschmutzt, das es berührt. Es ist eine Sache, wenn es ein oder zwei Programme, ein paar Bibliotheken usw. installiert. Das ist einer der Gründe, die ich nicht verwenden wollte/usr/local
.