运行具有未知 perl 位置的 perl 脚本

Put*_*nik 5 osx perl executable shell-script shebang

我正在开发一个 perl 脚本,希望由对 shell、linux 等了解很少的 Mac 用户下载,比如说办公室经理和会计师。

下载后,只需通过 GUI 双击即可执行脚本。

我的目标是让不精通技术的用户尽可能轻松地完成这项工作。

我的疑问是:

  • 下载后脚本将没有可执行位
  • 如果 perl 可执行文件不在默认位置,那么我应该写一些东西而不是#!/usr/bin/perl. 我应该在那里写什么?除了打开控制台并输入之外还有其他方法perl ./script.pl吗?

Jos*_* R. 8

或者,您可以sh为您处理:

 #!/bin/sh
 exec perl -x "$0" "$@"

 #!/usr/bin/perl
 ...
Run Code Online (Sandbox Code Playgroud)

是的,这sh和 Perl 都在一个文件中。

来自man perlrun

-x
告诉 Perl 该程序嵌入在一大块不相关的文本中,例如邮件消息中。前导垃圾将被丢弃,直到以“#!”开头的第一行 并包含字符串“perl”。将应用该行上任何有意义的开关。

这种方法只假定的路径sh(这应该是在任何兼容POSIX的操作系统相同)和非交互式的实例sh具有perl在其某处PATH

至于确保脚本设置了可执行位,您始终可以将其作为 tarball 分发,并让您的用户从 GUI 中“右键单击,在此处提取”。如果 tarball 包含设置了可执行位的脚本,则提取的脚本应该设置了可执行位。


Joh*_*024 6

对于 shebang 行,请使用:

#!/usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)

env将在执行perl它找到的第一个时搜索 PATH 。如果你想为 perl 指定任何选项,只需将它们添加到上面一行的末尾。

如果perl安装了多个,env将运行它在 PATH 中找到的第一个。