【问题标题】:Specifying a specific version for shebanged scripts为 shebanged 脚本指定特定版本
【发布时间】:2011-01-08 00:07:19
【问题描述】:

如果我调用一个可执行脚本:

$ ./myscript

顶部有以下定义:

#! /usr/bin/env perl

我有以下 perls:

$ ls -l /usr/bin | grep perl

-rwxr-xr-x.   2 root root        8416 2010-07-09 05:18 perl --> perl5.10.0
-rwxr-xr-x.   2 root root        8416 2010-07-09 05:18 perl5.10.0
-rwxr-xr-x.   2 root root        8416 2010-07-09 05:18 perl4.10.0

是否可以设置某种环境变量(或任何其他方式)来表示使用的 perl 版本将是perl4.10.0?我正在寻找的答案不涉及使用特定 perl 版本的绝对路径调用脚本,不更改符号链接,也不特定于语言(这意味着它适用于 /usr/bin/env ruby/usr/bin/env python 等)。

【问题讨论】:

    标签: perl environment-variables executable


    【解决方案1】:

    否 - #! /usr/bin/env perl 表示“使用执行 /usr/bin/env perl 的结果作为此脚本的解释器”,因此您需要向 env(或您选择在命令中调用的任何其他脚本)传授额外知识line) 以了解如何根据您传递的参数查找可执行文件。 /usr/bin/env perl 不会在您的 $PATH 中查找与“perl*”匹配的文件 - 它会查找名为 exactly 'perl' 的可执行文件。

    【讨论】:

    • 您对所发生事情的解释有点不对劲。内核只执行命令/usr/bin/env perl SCRIPT REMAINING ARGSenv 在路径中搜索名为 perl 的可执行文件并执行 /path/to/perl SCRIPT REMAINING ARGS
    • 我觉得没有办法解决这个问题。只是想验证我的假设。感谢您的贡献。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多