Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-在Windows中编辑,但直接在Unix shell上运行?_Windows_Perl_Shell_Shebang - Fatal编程技术网

Perl-在Windows中编辑,但直接在Unix shell上运行?

Perl-在Windows中编辑,但直接在Unix shell上运行?,windows,perl,shell,shebang,Windows,Perl,Shell,Shebang,我用Textpad编写我的Perl代码(我相信这是Windows中唯一可用的)。我通过显式调用Perl解释器在LinuxCmd提示符下运行它,例如“perlscript.pl”。我想知道是否可以像“/script.pl”中那样简单地运行它。当我在Windows中添加shebang时,Linux提示符会抱怨“command not found”,但是如果我用Perl调用它,它可以正常工作,并且在我完成脚本后也可以正常工作,因此问题似乎是shebang没有被正确解析。有什么建议吗?为什么其余的Win

我用Textpad编写我的Perl代码(我相信这是Windows中唯一可用的)。我通过显式调用Perl解释器在LinuxCmd提示符下运行它,例如“perlscript.pl”。我想知道是否可以像“/script.pl”中那样简单地运行它。当我在Windows中添加shebang时,Linux提示符会抱怨“command not found”,但是如果我用Perl调用它,它可以正常工作,并且在我完成脚本后也可以正常工作,因此问题似乎是shebang没有被正确解析。有什么建议吗?为什么其余的Windows格式化代码可以工作,而shebang却不能工作?

文件的第一行是

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

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

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

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


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

也许你应该说你的shebang是什么样子的?据我们所知,您的shebang可能是
#!C:\Perl\Perl.exe
。是否已设置脚本文件的可执行权限
chmod u+x script.pl
@choroba除非我弄错了,否则如果这是问题所在,错误将是
权限被拒绝
@TLP:True。我真傻。太棒了——事实上,Textpad允许以Unix格式保存文件。谢谢
#!/usr/bin/perl<LF>