LINUX.ORG.RU

Не работает скрипт PERL


0

0

Прошу сильно не ругаться, т.к. язык перл только предстоит мне изучить... собственно проблемма такая-скрипт после проверки обновления не создаёт файл. Вот скрипт

#!/usr/bin/perl use Shell; $time=localtime(time); exec('sudo yum -y update'); open(FFF,«> /my_scripts/time»); print (FFF «#!/usr/bin/perl \n print \» "); print(FFF $time); print (FFF «\»"); close(FFF);

Заменить строчку с open на
open (FFF,«> /my_scripts/time») or die «$@ $!»;

И посмотреть, что скажет умирающий open.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

я и не пытался его получит, я даже не намекал в посте на это

DeaD_MoroZ
() автор топика
Ответ на: комментарий от DeaD_MoroZ

косые кавычки (грависы) исполняют заключённую в них команду как команду консольной оболочки. То есть `rm -rf /` затрёт вашу систему (если вы дали скрипту рута).

Ну и помимо выполнения оно ещё и возвращеат результат команды - то есть вывод консольной команды. К примеру, $list = `ls` запишет в $list вывод команды ls.

ps Осильте LorCode, дабы ваши сорцы читались по-человечески.

helios ★★★★★
()

Вот вроде бы до ума довёл то что хотел, может кому надо. Автоматическое обновление для cron, и результат пишется в файл.

#!/usr/bin/perl
$time=localtime(time);
$result=`sudo yum update`; #нужен правильно настроенный /etc/sudoers
open(FFF,"> /my_scripts/time");
print (FFF "#!/usr/bin/perl \n print \"Время обновления--> $time\n\";\n");
my @strs = split $/,$result;
my $fl1=0;
my $fl2=0;
print(FFF "print\"Результат:\n\";\n");
while(my $s = shift @strs) {
if ($s =~ /Dependencies Resolved/) { $fl2=1; }
if (($fl1==1) && ($fl2==0)) { print (FFF "print \"$s \n\";\n"); }
if ($s =~ /Setting up Update Process/) { $fl1=1; }
                             }
close(FFF);
system('chmod +x /my_scripts/time');

DeaD_MoroZ
() автор топика
Ответ на: комментарий от DeaD_MoroZ

>читай пожалуйста ВСЕ посты прежде чем написать ответ

Это не Ъ :)

madgnu ★★★★★
()
Ответ на: комментарий от DeaD_MoroZ
#!/usr/bin/perl 
$time=localtime; 
open F,"> /my_scripts/time"; 

print F "#!/usr/bin/perl\nprint'Время обновления --> $time\n';"); 
my @strs = split $/,`sudo yum update`; 

print F q[print"Результат:\n";]; 

while(shift @strs) { 
    $fl2=1 if /Dependencies Resolved/;
    print F qq[print "$_ \\n";] if $fl1==1 && $fl2==0;
    $fl1=1 if /Setting up Update Process/;
} 
close F; 
system 'chmod +x /my_scripts/time'; 

Тоже должно работать.

Гольфисты в треде есть? ;)

Кстати, close сделается сам по завершению скрипта...

helios ★★★★★
()
Ответ на: комментарий от helios

ну так тоже можно... да так даже интереснее...

DeaD_MoroZ
() автор топика
Ответ на: комментарий от DeaD_MoroZ

> а boolean в перле же нету?

В Perl нету типов данных. Есть контексты, в которых используются данные. В разных контекстах данные приводятся к своему представлению.

Про булевы значения. Ложью будут считаться занчения меременной: пустой хеш/массив, ноль, строка из нуля, пустая строка, значение undef.

helios ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.