CGI/Perl Guide | Learning Center | Forums | Advertise | Login
Site Search: in

  Main Index MAIN
INDEX
Search Posts SEARCH
POSTS
Who's Online WHO'S
ONLINE
Log in LOG
IN

Home: Need a Custom or Prewritten Perl Program?: I need a program that...:
How to execute a shell command from a CGI script

 



antovinraj
New User

Aug 21, 2014, 2:50 AM

Post #1 of 2 (18076 views)
How to execute a shell command from a CGI script Can't Post

Hi All,

I want to access all the changes submitted in perforce and to display in the web page for a particular user. CGI Script:
#!/usr/bin/perl -wT
use CGI;
$cgi = CGI->new;
print $cgi->header;

print <<EndOfHTML;
<form action="post.cgi" method="POST">
<table>
<tr><td>Perforce User</td>
<td><select size="1" name="user">
<option name="antoine">antoine</option></select>
</td></tr>
<tr>
<td>Start Date</td><td><input name=startdate></td>
</tr><tr>
<td>End Date</td><td><input name=enddate></td>
</tr><tr>
<td colspan=2 align=\"center\"><input type=\"submit\" value=\"Sub
+mit\"></td>
</tr></table></form>";
EndOfHTML
[download]
post.cgi:
#!/usr/bin/perl -w
use CGI;
$ENV{ 'PATH' } = '/bin:/usr/bin:/usr/local/bin';
delete @ENV{ 'IFS', 'CDPATH', 'ENV', 'BASH_ENV' };

print header;
my %form;
foreach my $p (param()) {
$form{$p} = param($p);
}
my $user = $form{'user'};
my $output = system ("sudo -i -u avinodh p4 changes -u $user > /tmp/$u
+ser");
print $output;
print "The active user is: ", `whoami`;
print end_html;
[download]

When we execute the script in the browser it is giving output as "256The active user is: www-data"[\b].

I have not added the validation part in the above script.

Please provide your inputs.

Thank You
Antoine.


FishMonger
Veteran / Moderator

Aug 21, 2014, 6:34 AM

Post #2 of 2 (18070 views)
Re: [antovinraj] How to execute a shell command from a CGI script [In reply to] Can't Post

The system function does not return the output of the command. It returns the exit code.

If you need the output of the command, then you need to use `` backticks or the qx() operator.


Code
my $output = `sudo -i -u avinodh p4 changes -u $user > /tmp/$user`;

or

Code
my $output = qx(sudo -i -u avinodh p4 changes -u $user > /tmp/$user);


However, since the command itself is redirecting the output to a file, I'm not sure what you expect to be capturing in $output.

 
 


Search for (options) Powered by Gossamer Forum v.1.2.0

Web Applications & Managed Hosting Powered by Gossamer Threads
Visit our Mailing List Archives