为什么我的 Perl 脚本在 Windows 中运行良好,但在 Ubuntu 中却不行?

为什么我的 Perl 脚本在 Windows 中运行良好,但在 Ubuntu 中却不行?

我的 Perl 脚本在 Windows 命令行中运行良好;但是,我无法在 Ubuntu 中运行它。我尝试使用一个简单的 Perl 脚本,但它给出了错误消息:

can't open perl script "testl.pl" inpute/output error.

下面是我用来测试的脚本,保存为test.pl:

#!/usr/bin/perl
print "content-type: text/html \n\n";
print "hello worrld\n";

有人可以帮我解决这个问题吗?

答案1

您运行了一个脚本test.pl,但并未运行您发布的脚本。您显然运行了 PATH 中的脚本,而您发布的脚本不在您的 PATH 中。

您发布的脚本中没有任何内容可以产生您在问题中发布的输出。

您发布的脚本在 Ubuntu 中运行良好。这些是在 Ubuntu 中运行脚本时需要确保的事项。

在 Linux 中运行脚本

您可以使用解释器的名称来调用脚本。在本例中:

$ perl test.pl
$ perl /home/user/test.pl

这将运行当前位于调用命令的同一目录中或在 Path 变量中找到的脚本。此方法不会搜索变量PATH。如果脚本不在当前文件夹中,则必须为要执行的脚本提供完整路径名。

该脚本不需要有 shebang ( #!/usr/bin/perl) 标头。

设置执行位

您可以使用以下方式设置执行位:

$ chmod +x test.pl

与执行位设置相结合,它还需要 shebang 标头。如果设置了执行位,则可以通过其文件名调用脚本。它将仅运行在变量中找到的脚本PATH。将执行按 PATH 中的顺序找到的第一个脚本。与你说的默认情况下有效的 Windows 不同(出于安全原因)当前目录.不在用户路径中,因此不会被搜索。您可以通过运行以下命令来检查路径变量:

 $ echo $PATH

如果脚本位于以下默认路径搜索位置之一(以及其他位置),则会执行该脚本:

~/bin
/usr/local/bin

如果脚本不在 PATH 变量的目录中,则必须指定完整路径名才能运行它:

$ ./test.pl
$ /home/userid/test.pl

确定要定位哪个脚本

您可以使用以下命令检查正在运行的脚本的位置:

$ type test.pl

这将显示第一个test.pl脚本的完整路径名。如果不同的 PATH 中有多个脚本,您可以使用以下命令显示所有脚本:

$ type -a test.pl

在这种情况下,如果有多个同名的脚本,则通过完整路径名调用脚本将是最佳方法。具有常见名称的脚本test.pl应始终通过完整路径名调用,以确保执行正确的脚本。

相关内容