Nie mogę się jq
zachowywać „normalnie” w potoku powłoki. Na przykład:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
powoduje jq
po prostu wydrukowanie tekstu pomocy *. To samo dzieje się, jeśli spróbuję przekierować jq
dane wyjściowe do pliku:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Czy jq
celowo ratuje się, jeśli stwierdzi, że nie jest uruchamiany przez tty? Jak mogę temu zapobiec, aby móc korzystać jq
z potoku?
* (Zdaję sobie sprawę, że ten przykład zawiera bezużyteczne użycie kota ; służy to wyłącznie celom ilustracyjnym)
jq
zarówno czyta z potoku, jak i pisze do innego potoku. Jeśli pragnie się po prostu zobaczyć wynikjq
, tocat
samo w sobie nie jest konieczne..
z przyzwyczajenia, ponieważ moją standardową praktyką jest najpierw zobaczyć, jak wygląda JSON, a następnie wrócić i zacząć dodawać do filtra, który częściej trzeba będzie cytować.Jednym z przypadków użycia, które często robię, jest „Jak na przykład skonstruować dane JSON w celu dostarczenia ich do innych poleceń powłoki
curl
?” Sposób, w jaki to robię, polega na użyciu--null-input/-n
opcji:I przykład przekazujący go do
curl
:źródło
jq
na początku potoku powłoki, a nie na środku / końcu do filtrowania niektórych danych.curl
Przykładem jest jeden podstawowy, ale znalazłem się często ręcznie wpisanie danych do JSONcurl
i staramy się podając porządku, więc pomyślałem, że może to być przydatne dla innych.