Я пытаюсь написать программу Perl, которая выполнит скрипт bash. Сценарий Perl выглядит следующим образомВыполнение скрипта bash из программы Perl
#!/usr/bin/perl
use diagnostics;
use warnings;
require 'userlib.pl';
use CGI qw(:standard);
ReadParse();
my $q = new CGI;
my $dir = $q->param('X');
my $s = $q->param('Y');
ui_print_header(undef, $text{'edit_title'}.$dir, "");
print $dir."<br>";
print $s."<br>";
print "Under Construction <br>";
use Cwd;
my $pwd = cwd();
my $directory = "/Logs/".$dir."/logmanager/".$s;
my $command = $pwd."/script ".$directory."/".$s.".tar";
print $command."<br>";
print $pwd."<br>";
chdir($directory);
my $pwd1 = cwd();
print $pwd1."<br>";
system($command, $directory) or die "Cannot open Dir: $!";
скрипт завершится со следующей ошибкой:
Can't exec "/usr/libexec/webmin/foobar/script
/path/filename.tar": No such file or directory at /usr/libexec/webmin/foobar/program.cgi line 23 (#3)
(W exec) A system(), exec(), or piped open call could not execute the
named program for the indicated reason. Typical reasons include: the
permissions were wrong on the file, the file wasn't found in
$ENV{PATH}, the executable in question was compiled for another
architecture, or the #! line in a script points to an interpreter that
can't be run for similar reasons. (Or maybe your system doesn't support #! at all.)
Я проверил, что разрешения правильно, архивный файл я переход к моему скрипту bash существует, а также попытка из командной строки выполнить ту же команду, которую я пытаюсь запустить из скрипта Perl (/usr/libexec/webmin/foobar/script /path/filename.tar
), и он работает правильно.
Вы писали, что вы проверили разрешения, но только уточнить: делает пользователь, выполняющий '/ USR/libexec/Webmin/Foobar/скрипт "также имеет разрешение на выполнение? И вы также проверили предложение о shebang (#!)? Так, например, если скрипт начинается с '#!/Bin/bash', то проверить, существует ли'/bin/bash' и исполняемый файл. – fejese
Проверял все это, и, как я уже сказал, если я запустил то же самое из командной строки, то отлично – Cris
Пожалуйста, добавьте '-f или die qq {File" $ _ "не существует} для $ command, $ directory;' непосредственно перед системный вызов и сообщить результат – Borodin