Em:
cmd1
cmd2
ou
cmd1; cmd2
Eles são executados sequencialmente.
Em
cmd1 && cmd2
Ou
cmd1 || cmd2
Eles são executados sequencialmente, mas a execução de cmd2 depende se cmd1 é bem-sucedido (para && ) ou se falha (para || ).
Em
cmd1 | cmd2
ou
cmd1 & cmd2
cmd1 |& cmd2 # ksh
coproc cmd1; cmd2 # bash/zsh
ou
cmd1 <(cmd2) # ksh/zsh/bash (also yash though with a different meaning)
Eles são executados simultaneamente. No primeiro caso, alguns shells só esperam por cmd2 antes de continuar com o resto do script, enquanto outros esperam por ambos. No segundo caso, os shells aguardam apenas que cmd2 ( cmd1 seja executado de forma assíncrona (ou em segundo plano quando executado em um shell interativo)) e no terceiro por cmd1 ( cmd2 assíncrono). / p>
Em:
< "$(cmd1)" x=$(cmd2) y=$(cmd3) cmd4 "$(cmd5)" > "$(cmd6)"
Os comandos são executados sequencialmente, mas a ordem depende do shell. Em qualquer caso, cmd4 será executado por último.
Em:
cmd1 =(cmd2) # zsh
Eles são executados sequencialmente ( cmd2 first).
Observe que, em todos esses casos, qualquer um desses comandos poderia iniciar outros processos. A concha não teria conhecimento deles, portanto não pode esperar por eles.