ponto-e-vírgula pausando no bash [duplicado]

2

Por que esse script de shell:

$ curl -d "asd" 0.0.0.0/abc & echo "abc";

resulta em eu ter que pressionar enter antes que ele entre no shell novamente. O curl é apenas uma solicitação de postagem para um servidor da web simples que retorna abc .

No entanto, esse script não exige que eu pressione enter antes de entrar no shell novamente

$ echo "abc" & echo "abc"
    
por aceminer 03.07.2018 / 15:29

1 resposta

6

& envia o comando curl para o segundo plano, onde será executado sempre que for executado, o shell não esperará por ele (ele imprime o número do trabalho e o PID). Em vez disso, o shell executa echo , que, como é construído, pode ser executado com mais rapidez do que curl , portanto, o shell termina com echo e imprime o prompt antes curl para produzir qualquer saída.

Por exemplo a saída que recebo com o Bash:

bash ~ $ curl -d "asd" 0.0.0.0/abc & echo "abc";
[1] 26757
abc
bash ~ $ curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused

Existe o aviso no início da última linha.

Atingindo Enter , o shell imprime outro prompt, no qual também verifica se o trabalho em segundo plano foi concluído e imprime uma nota sobre isso:

[1]+  Exit 7                  curl -d "asd" 0.0.0.0/abc
bash ~ $ 

Agora, eu não sei exatamente o que você está fazendo, mas ter trabalhos em segundo plano que são impressos no terminal é um pouco estranho por causa disso, então você pode querer redirecionar a saída de curl em outro lugar, ou executá-lo em primeiro plano. Por exemplo. curl something; echo curl done executaria curl primeiro, depois echo e curl something && echo curl done só executariam echo se curl não falhasse.

    
por 03.07.2018 / 15:53