当我跑
youtube-dl -j "$youtube_url" | jq
我得到了一个不错的 json 输出。但是,当我跑步时
json=$(youtube-dl -j "$youtube_url" | jq)
然后jq
打印它的使用页面,然后 youtube-dl 失败并出现broken pipe
错误。-json
变量为空。
我猜它jq
之前运行过youtube-dl
,因为标准输入上没有数据,所以它终止打印使用说明。当jq
不再运行时,则没有可写入的管道,因此youtube-dl
失败。这只是一个猜测。我真的不明白这里发生了什么。请赐教!
在堆栈溢出上回答:
在你的情况下:
边注:
一般来说,当你运行时,如果读得不够快
foo | bar
,写得好的foo
会等待;如果写得不够快,bar
写得好bar
会等待。foo
哪个先开始并不重要。我们可以争论是否
jq
“写得好”。您的问题仍然源于其取决于标准输出的古怪行为,而不是标准输入。你的假设是错误的。