вопрос Линуксоидам

Irma1

как мне из одного perl-скрипта передать управление другому завершив при этом первый скрипт?
т.е. для примера, есть 2 скрипта:
1(t2.pl):
#!/usr/bin/perl -w
`mkdir test`;
print "delete dir? y/n ";
chomp($yn1 = <stdin>);
if($yn1 eq "y")
{`./t3.pl` }
2(t3.pl):
#!/usr/bin/perl -w
print "HI\n";
print "delete that dir? y/n \n";
chomp($yn2 = <stdin>);
if($yn2 eq "y")
{`rm -r test`}
я хочу, чтобы после выбора "y" запускался t3.pl и управление передавалось ему, а t2.pl заканчивал работу. если запустить как есть сейчас, то t2.pl не заканчивает работу, пока запущен t3.pl, при этом в терминале (вся работа через окошко "терминала") не появляется приветствие из t3.pl и запрос на удаление директории.
прошу помощи =)
PS я ламер тот еще..

vall

exec?

Ivan8209

Вопрос не по линуксу.
Для таких задач придуманы yes(1) и exec.
---
...Я работаю антинаучным аферистом...

Irma1

спасибо за ответы, приду домой прогуглю эти функции.

Ivan8209

Это надо не гуглять, а читать man.
Хотя...
Это вполне в духе линуксоедов --- гуглять вместо чтения документации.
---
Q43: А какое предназначение у винды?

sakura

я тестировал под виндой. у меня все работало.
-------------------- test1.pl -------------------------
#!/usr/bin/perl -w
print "delete dir? y/n ";
chomp($yn1 = <stdin>);
if($yn1 eq "y")
{
system('test2.pl');
exit; # чтобы после выполнения test2.pl прога закончила работу
}
------------------------------------------------------------
-------------------- test2.pl -------------------------
#!/usr/bin/perl -w
print "HI\n";
print "delete that dir? y/n \n";
chomp($yn2 = <stdin>);
if($yn2 eq "y")
{
print "Deleting...\n";
}
------------------------------------------------------------
у меня все работало. а в чем у тебя сложность-то была? я что-то не понял из твоего поста

sakura

еще, кажется, в перле fork есть. Но я никогда им не пользовался. почитай, если тебе так важно, чтобы test1.pl обязательно завершал работу.
А test2.pl можно запускать независимым процессом с помощью амперсента
./test2.pl&

sany79

Так ему нужно было, чтобы test1 завершался немедленно, а не дожидался завершения test2. Верно пишет КОНТРА, нужен exec, и в Перле он есть.

sany79

А приветствие из t3 не появлялось понятно почему. Потому что конструкция `...` не только запускает программу, но и съедает её стандартный вывод, который у тебя никак не используется. Это хулиганство, писать `...`, если нужно всего лишь запустить программу, как в твоём случае — для этого есть system и exec. К тому же `mkdir test` — извращение; лучше так: mkdir 'test'.
См.
perldoc -f mkdir
perldoc -f exec
perldoc -f system
Оставить комментарий
Имя или ник:
Комментарий: