I want to do the following from the tcsh command line, preferably in 1 line:

build_cmd1 &
build_cmd2 &
build_cmd3 &
wait until all parallel build commands finish
regression_cmd

That is, I want to fork off a bunch of build commands, block until they exit, and then run another command. I want to do this from the tcsh command line.

link|improve this question

78% accept rate
feedback

1 Answer

up vote 2 down vote accepted

::checks with the man pages::

It looks like csh and derivatives support wait, so consider something like

% cmd1 &; cmd2 &; cmd3 &; wait; thing_to_do_after

or because the && and || operators short-circuit you could use

% (cmd1 &; cmd2 &; cmd3 &) && thing_to_do_after

but only if you are certain of the exit state of the subshell (true means use && and false means use ||).

If you want the wait to be impervious to previously launched background tasks put it in the subshell (()) like this:

% (cmd1 &; cmd2 &; cmd3 &; wait) && thing_to_do_after

or

% (cmd1 &; cmd2 &; cmd3 &; wait; thing_to_do_after)

//please be aware that I haven't used tcsh in ages...

link|improve this answer
This almost works perfectly! Could you modify your answer to have 1 slight tweak -- combine the two answers so the combination is impervious to other background commands launched from the same shell: ( cmd1 & ; cmd 2 & ; cmd 3 & ; wait ) && thing_to_do_after Also, your second answer blocks on cmd3, but not on cmd2 and cmd1. – Ross Rogers Jul 9 '10 at 20:45
@Ross: tweaked as requested. – dmckee Jul 10 '10 at 0:59
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.