Есть необходимость запустить параллельно две программы из скрипта, причем они должны возвращать код завершения для запуска третьей программы.Только в случае успешного завершения двух первых, должна запускаться третья программа.
Существует ли возможность написать это для bash одной строкой?
Я надумал уже что-то, только нет возможности проверить:
1 вариант: (action1&;action2&)&&action3;
2 вариант: ((action1&)&&(action2&))&&action3;есть какие-то идеи, наработки?
Непременно одной строкой?$ { command1 & pid1=$! ;}; { command2 & pid2=$! ;}; wait $pid1 $pid2
Большое спасибо за подсказку!Программа одной строкой не работает должным образом, но забив ее в файл и перенеся строки, заработало как надо!
============
#!/bin/sh{
/home/file1& pid1=$!;
};
{
/home/file2& pid2=$!;
};wait $pid1 $pid2;
exec /home/file3;
============Я проверил, процессы действительно работают параллельно и третья не запустится без окончания их работы.
Вопрос: все-таки, есть ли возможность написать одной строкой?
Насколько я понял, $! - специальная переменная, возвращает pid запущенного приложения. Верно?
Существует ли хороший мануал по bash и программированию в shell на русском.
На сайте www.gnu.org есть отличный мануал, правда он на английском языке...Спасибо за внимание!
>
>Вопрос: все-таки, есть ли возможность написать одной строкой?можно, мой пример работает. Внимательно смотри на пробелы.
{ sleep 5 & pid1=$! ;};{ sleep 8 & pid2=$! ;};wait $pid1 $pid2;echo ok
здесь все пробелы нужны.>Насколько я понял, $! - специальная переменная, возвращает pid запущенного приложения. Верно?
Верно, pid последнего фонового процесса, даже если он уже отработал.>Существует ли хороший мануал по bash и программированию в shell на русском.
http://gazette.linux.ru.net/rus/articles/index-abs-guide.html>Спасибо за внимание!
Всегда пожалуйста :)