У Bash і zsh (і, можливо, інших оболонках) ви можете використовувати підстановку процесу ( Bash / zsh ) для створення файлу на льоту, а потім використовувати його як вхід до наступного процесу в ланцюзі конвеєра.
Наприклад, я намагався проаналізувати вихід JSON від cURL за допомогою jq
та less
, але отримував Failed writing body
помилку.
# Note: this does NOT work
curl https://gitlab.com/api/v4/projects/ | jq | less
Коли я переписав його за допомогою заміни процесу, він працював!
# this works!
jq "" <(curl https://gitlab.com/api/v4/projects/) | less
Примітка: jq
використовує свій 2-й аргумент для визначення вхідного файлу
Бонус: Якщо ви використовуєте , jq
як я і хочете , щоб тримати розфарбовані вихід в less
, використовуйте наступну командний рядок замість того, щоб :
jq -C "" <(curl https://gitlab.com/api/v4/projects/) | less -r
(Дякую Ковару за їх пояснення, чому Failed writing body
це сталося. Однак, їхнє рішення використання tac
двічі для мене не спрацювало. Я також хотів знайти рішення, яке краще масштабуватиме для великих файлів, і намагається уникати інших проблем, зазначених як коментарі на цю відповідь.)