Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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执行shell脚本时,它会在一行中为我提供结果。如何纠正?_Perl_Shell - Fatal编程技术网

当我试图通过perl执行shell脚本时,它会在一行中为我提供结果。如何纠正?

当我试图通过perl执行shell脚本时,它会在一行中为我提供结果。如何纠正?,perl,shell,Perl,Shell,当我试图通过perl CGI执行一个shell脚本时,它会在一行中向我提供结果。但是当我运行shell脚本时,它以正确的格式显示结果。请指导我怎样做才合适 下面是perl代码 #!/usr/bin/perl use CGI qw(:standard); exec("sh /tmp/att.sh -t v2 --help"); print end_html 请帮我解决这个问题。在您的执行之前添加这个: print "Content-type: text/plain\n\n"; 您可以安全地

当我试图通过perl CGI执行一个shell脚本时,它会在一行中向我提供结果。但是当我运行shell脚本时,它以正确的格式显示结果。请指导我怎样做才合适

下面是perl代码

#!/usr/bin/perl
use CGI qw(:standard);

exec("sh /tmp/att.sh -t v2  --help");
print end_html

请帮我解决这个问题。

在您的
执行之前添加这个:

print "Content-type: text/plain\n\n";
您可以安全地删除
打印结束\u html因为它无论如何都不会执行

事实上,
exec
之后的任何操作都不会执行。如果希望在shell调用后执行更多Perl,请查看
system
或其他方法(请参阅)

如果您想将输出嵌入HTML,您必须更加复杂,使用反勾号或打开管道,因为您需要在打印前捕获输出和HTML转义

use CGI qw/escapeHTML/;

print "Content-type: text/html\n\n";

printf "<pre>%s</pre>\n", escapeHTML(`sh /tmp/att.sh -t v2  --help`);
使用cgiqw/escapeHTML/;
打印“内容类型:text/html\n\n”;
printf“%s\n”,escapeHTML(`sh/tmp/att.sh-tv2--help`);
编辑(根据@ysth的请求):什么是

PRE元素告诉可视化用户代理,所附文本是“预格式化”的。处理预格式化文本时,可视用户代理:

  • 可能会保留完整的空白
  • 可以使用固定间距字体呈现文本
  • 可能会禁用自动换行
  • 不能禁用双向处理

你说的“一行通”是什么意思?
att.sh
的内容是什么?@MichaelT只是提醒一下,如果在HTML上下文中打印纯文本,它看起来就像一条长线。在这里使用Perl似乎毫无价值。您可以直接调用shell脚本。您可以在输出中通过标记wgap输出:添加html如何处理不在
中的新行的解释?