私はperlスクリプトがある場所で何度も立ち往生しています。私はCGIファイルにいくつかのHTMLコンテンツとシェルスクリプトを実行するシステムコマンドを持つ関数を作っています。次に、CGI関数を呼び出してブラウザにコンテンツを表示するperlファイルを呼び出すhrefがあります。しかし、CGIのシステムコマンドの実行以外はすべてロードされます。私はこのシステムコマンドをPerlファイルそのものに入れようとしましたが、実行時にはコマンドラインからシェルスクリプトを正常に実行しています。しかし、私はこれをボタンクリックで発生させたいので、CGIコールをしなければならなかったが、それでも私はそれを呼び出すことができません。 私は多くの質問をしてきましたが、私はまだ完璧な答えを探しています。 は、ここに私のコードです: test1.plPerlからcgiによって呼び出されたときにシステムコマンドが実行されない
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use Basecamp::UI;
use Basecamp::Dashboard;
use Basecamp::Info;
my $cgi = Basecamp::UI->new->cgi();
my $dashboard = Basecamp::Dashboard->new();
my @html = $cgi->tab_ext();
#push @html, '<div class="page">';
#push @html, newstuff();
#push @html, '</div>';
#print "Hello Hey";
#system(' sh /home/basecamplocal/Perforce/depot/qeutils/basecamp_dev/sample.sh ');
print $cgi->begin('Basecamp | ext', $dashboard), $cgi->begin_page();
print @html;
print $cgi->end_page(), $cgi->begin_footer(), $cgi->end_footer(), $cgi->end();
シェルスクリプトは次のとおりです。
#!/bin/bash
#perl Basecamp.pl > log_sample.txt
touch log_sample.txt
echo "Good Day"
CGIファイル生成機能:
=item tab_ext()
======================================================================================
DESC: Generates appropriate tabs for About, about.pl.
OUT: Returns array of scalars with html to draw the tabs and any associated
subtabs.
======================================================================================
=cut
sub tab_ext
{
my ($self) = @_;
my $tab = $self->param('tab');
my @tabs = ('<li><a href="test1.pl?tab=New">Status Restart</a></li>');
my @subtabs =();
my @html =();
$tabs[0] = '<li class="selected"><a href="#">Status Restart</a></li>';
@html = ('<ul id="tabs">', @tabs, '</ul>');
push @html, ('<ul id="subtabs">', @subtabs, '</ul>');
print "Content-type: text/html\n\n";
system("sh /full path to shell file /sample.sh ");
return @html;
}
と私は上のtest1.plファイルを呼び出していますhref call html。シェルスクリプトの実行を除いて、CGIからのHTMLコンテンツ全体が表示されています。 救いの手をいただければ幸いです。
http://perlmaven.com/running-external-programs-from-perl – Vir
ご覧になれますか?リンクはすべてシステムコマンドに関するもので、私はそれが独立した実行でうまく動作していると言いました。 –
'sh'を明示的に呼び出す必要はありません(CGIスクリプトとして実行するときにデフォルトの' $ PATH'にないかもしれません)。 'sample.sh'を実行可能にして、' system( '/ full/path/to/sample.sh')だけ使うことができます。今のように末尾のスペースを含めないでください。 – reinierpost