【问题标题】:Perl - edit in Windows but run directly on Unix shell?Perl - 在 Windows 中编辑但直接在 Unix shell 上运行?
【发布时间】:2014-02-09 23:23:44
【问题描述】:

我在 Textpad 中编写我的 Perl 代码(我相信它只在 Windows 中可用)。我通过显式调用 Perl 解释器在 Linux cmd 提示符下运行它,例如“perl 脚本.pl”。我想知道是否可以像在“./script.pl”中一样简单地运行它。当我在 Windows 中添加 shebang 时,Linux 提示抱怨“找不到命令”,但如果我用 Perl 调用它可以正常工作,并且在我 dos2unix 脚本后也可以正常工作,所以问题似乎是 shebang 没有被解析正确。有什么建议?为什么其他 Windows 格式的代码可以工作,但 shebang 不行?

【问题讨论】:

  • 也许你应该说一下你的shebang是什么样子的?据我们所知,您的 shebang 可能是 #!C:\Perl\Perl.exe
  • 你是否设置了脚本文件的可执行权限? chmod u+x script.pl.
  • @choroba 除非我弄错了,如果这是问题所在,错误将是 Permission denied
  • @TLP:是的。傻我。

标签: windows perl shell shebang


【解决方案1】:

您的问题是,与其他操作系统(LF 或 \n)相比,Windows 更喜欢不同的行尾约定(CRLF 或 \r\n)。默认情况下,您的编辑器正在创建带有 \r\n 行结尾的文件。

shebang 是由操作系统解析的,对于命令末尾的流浪 \r,它不像 Perl 那样宽容。它尝试运行不存在的/usr/bin/perl\r

您的文本编辑器应该能够保存带有 Unix 行尾的脚本。这不会导致在 Windows 上使用它时出现问题,尽管一些 Windows 文本编辑器(包括记事本)无法正确识别行尾。这将使它在 Linux 上正常工作。

【讨论】:

  • 太棒了 - Textpad 确实允许以 Unix 格式保存文件。谢谢!
【解决方案2】:

文件的第一行是

#!/usr/bin/perl<CR><LF>

&lt;LF&gt; 是行终止符,因此操作系统会尝试启动/usr/bin/perl&lt;CR&gt;。没有这样的程序。 dos2unix 将第一行改为

#!/usr/bin/perl<LF>

&lt;LF&gt; 是行终止符,因此操作系统尝试启动 /usr/bin/perl 并成功。

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2023-03-31
    • 1970-01-01
    • 2014-09-29
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多