如果我在一个系统上同时拥有/usr/bin/perl
和/usr/local/bin/perl
,我应该使用哪一个?
答案1
这取决于:在某些系统上,例如BSD打包,/usr/local/bin
可能是包安装可执行文件的目录。在这种情况下,它会更新(也许更好),但/usr/bin/perl
会更稳定。
您可以使用perl -V
查看哪个版本号较新。有时(在多用户系统上)的内容/usr/local/bin
并不是真正更新的。
通常的妥协是让用户决定,通过env
在 shebang/hashbang 行中使用(但同样,小路可能env
因系统而异)。 shebang 行指的是脚本的第一行,可能类似于以下之一:
#!/usr/bin/perl
#!/usr/bin/perl -w
#!/usr/bin/env perl
前两个指定运行 Perl 的目录。作为奖励,此表单允许传递选项,例如-w
(用于打开警告)。最后一行使用程序通过搜索用户环境变量中列出的目录来env
选择第一次出现的。perl
PATH
也可以运行这样的脚本:
perl myscript
它(如)告诉 shell从 中列出的目录中env
选择第一个出现的。perl
PATH
明确的
./perl myscript
当然会覆盖PATH
.但是带有 shebang 行的脚本是大多数人使用 Perl 脚本的方式(Perl 单行是另一回事)。
进一步阅读:
- /usr/bin/env perl - 查询,参考舍邦线
- Linux 上的 /usr/bin 与 /usr/local/bin
- 包装(7), FreeBSD 软件包系统
/usr/local/bin
答案2
它是给谁用的?如果只有你一个人,只要你的两个版本的 perl 都足够新就没有关系。是为了工作环境吗?如果是这样,请检查您的部署策略,因为他们可能有答案。如果是为了向公众分发,我建议根据软件包类型进行变化,特别是对 debs(根据 debian 指南)和 rpms 使用 /usr/bin/perl(因为 Red Hat 明确不允许 rpms 安装到 /usr/ local),但 /usr/bin/env perl 用于 tar 和 shar 软件包,因为它最有可能在随机的 UNIX 计算机上工作。