Estou correto ao supor que, quando ;
une dois comandos em uma linha, o Bash sempre espera até que o primeiro comando seja encerrado antes de executar o segundo comando? E da mesma forma, em um script de shell contendo dois comandos diferentes em linhas diferentes, o Bash sempre espera até que o comando na primeira linha seja encerrado antes de executar o comando na segunda linha?
Se for esse o caso, existe uma maneira de executar dois comandos em uma linha ou em um script, para que o segundo comando não espere até que o primeiro comando seja concluído?
Além disso, linhas diferentes em um script de shell equivalem a linhas separadas unidas por ;
ou &&
?
Respostas:
Você está correto, os comandos nos scripts são executados sequencialmente por padrão.
Você pode executar um comando em segundo plano com o sufixo de
&
(um único e comercial).Comandos em linhas separadas são equivalentes aos comandos associados
;
por padrão. Se você disser ao seu shell para abortar em códigos de saída diferentes de zero (set -e
), o script será executado como se todos os comandos tivessem se juntado&&
.fonte
Para responder sua segunda pergunta, você pode usar
&
para iniciar um comando em segundo plano e continuar com o script sem esperar que ele termine.Se você executar isso em um terminal interativo (em vez de um script), poderá usar
fg
para colocar o comando em segundo plano novamente em foco oujobs
para ver uma lista de tarefas em segundo plano.fonte