quando eu corro
youtube-dl -j "$youtube_url" | jq
Eu recebo uma boa saída json. No entanto, quando eu corro
json=$(youtube-dl -j "$youtube_url" | jq)
em seguida jq
, imprime sua página de uso e, depois disso, o youtube-dl falha com um broken pipe
erro. A json
variável - está vazia.
Suponho que jq
seja executado antes youtube-dl
e, como não há dados no stdin, ele encerra a impressão das instruções de uso. Quando jq
não está mais em execução, não há canal para gravar, então youtube-dl
falha. Isso é apenas um palpite. Eu realmente não entendo o que está acontecendo aqui. Por favor me esclareça!
Respondido no Stack Overflow :
No seu caso:
Nota:
Em geral, quando você executa
foo | bar
, bem escritofoo
, espera sebar
não for lido rápido o suficiente; e bem escritobar
vai esperar sefoo
não escrever rápido o suficiente. Não importa qual começa primeiro.Podemos argumentar se
jq
está "bem escrito". Ainda assim, seu problema se originou de seu comportamento peculiar, dependendo do stdout, não do stdin. Sua hipótese é falsa.