我的 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
应始终通过完整路径名调用,以确保执行正确的脚本。