当我尝试通过perl执行shell脚本时,它为我提供了结果,但所有这些都在一行中。怎么纠正呢?

时间:2013-12-15 03:23:28

标签: 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

请帮我解决。

1 个答案:

答案 0 :(得分:6)

exec

之前添加此内容
print "Content-type: text/plain\n\n";

您可以安全地删除print end_html;,因为它永远不会被执行。

事实上,exec之后的任何事情都不会被执行。如果你想在shell调用之后执行更多Perl,请查看system或其他一些方法(参见this link)。

如果你想在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`);

编辑(根据@ysth的要求):什么是<pre>

W3C documentation on pre

  

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

     
      
  • 可以保持空白不变。
  •   
  • 可以使用固定间距字体呈现文字。
  •   
  • 可能会禁用自动换行。
  •   
  • 不得禁用双向处理。
  •