Seu:
$(startBasics)
não faz sentido e é a causa do seu problema. Isso é substituição de comando. $(cmd)
expande para a saída de cmd
(com novas linhas finais removidas e sujeitas a divisão + glob, como você não citou). Você está pedindo ao shell para criar um comando fora da saída de startBasics
.
O que isso significa é que o shell precisa ler a saída de startBasics
até o final do arquivo para expandi-lo. Essa expansão aqui será tomada como um comando para executar, o que faz pouco sentido.
Para obter a substituição de comando, o shell inicia startBasics
com seu stdout redirecionado para um pipe e lê a partir da outra extremidade do pipe. Todos os processos gnome-terminal
herdarão esse stdout.
O shell só verá eof na outra extremidade do canal quando todos os descritores de arquivo abertos para o fim da escrita (em todos os processos) tiverem sido fechados. Isso provavelmente só acontecerá quando todos os gnome-terminals
iniciados por startBasics
tiverem terminado.
Aqui, você quer:
#!/bin/sh -
startBasics() {
gnome-terminal -e "sth" &
gnome-terminal --tab -e "sth_else" &
}
doOneThing() {
gnome-terminal --working-directory=/myDir1/build/ -e './myExecutable1' &
}
doAnoterThing() {
gnome-terminal --working-directory=/myDir2/build/ -e './myExecutable2' &
}
startBasics
doOneThing
doAnoterThing
wait # if you'd rather wait for all those processes to finish
# before exiting.