Bir kabuk boru hattında "jq" nasıl kullanılır?


198

Alamıyorum jqBir kabuk boru hattında "normal" davranmaya başlayamıyorum. Örneğin:

$ curl -s https://api.github.com/users/octocat/repos | jq | cat

jqsadece yardım metninin yazdırılması ile sonuçlanır *. Ben de jqçıktısını bir dosyaya yönlendirmeye çalışırsam aynı şey olur :

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json

Is jqo uçbirimlerden çalıştırılıyor değil belirlerse kasten Kefaletim? Kullanabilmem için bu davranışı nasıl önleyebilirimjqBir boru hattında ?


* (Bu örneğin, kedinin yararsız bir kullanım içerdiğinin farkındayım ; sadece örnekleme amaçlıdır)

Yanıtlar:


327

Bağımsız değişken olarak bir filtre sağlamanız gerekir. JSON'u jq, varsayılan olarak güzel yazdırma özellikleri dışında değiştirilmemiş bir moddan geçirmek için kimlik filtresini kullanın .:

curl -s https://api.github.com/users/octocat/repos | jq '.' | cat

23
Onu bıraktım çünkü OP'de vardı; Ben sadece jqbir borudan okuma ve başka bir boruya yazma olduğunu belirtmek için sadece bir yer tutucu varsayalım . Arzu sadece çıktısını görmekse jq, o zaman catkendisi gereksizdir.
chepner

3
(1) jq sürüm 1.5, böylece. bu gibi durumlarda gereksizdir. (2) "."
zirve

6
@peak Bir boru hattı için gerekli olmayabilir, ancak 1.5'e sahibim ve "." çıktıyı bir dosyaya yönlendirmek için.
MHarris

2
.Alışkanlıktan alıntı yapıyorum , çünkü standart pratiğim önce JSON'un neye benzediğini görmek, sonra geri dönüp, daha sık alıntılanmayacak olan filtreye eklemeye başlamak.
chepner

6
@WalterTross Evet ve bir yorumda 18 ay önce neden alıntı yaptığımı açıkladım.
chepner

16

Kendimi de sık sık yaparken bulduğum bir kullanım örneği curl" Örneğin diğer kabuk komutlarına sağlamak için JSON verilerini nasıl oluştururum ?" Bunu yapmanın yolu şu --null-input/-nseçeneği kullanmaktır :

Hiç bir girdi okumayın! Bunun yerine, filtre nullgiriş olarak bir kez çalıştırılır . Bu, jqbasit bir hesap makinesi olarak kullanıldığında veya sıfırdan JSON verileri oluşturmak için kullanışlıdır .

Ve içine bir örnek curl:

jq -n '{key: "value"}' | curl -d @- \
  --url 'https://some.url.com' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

9
Bu harika, ama bu soru ile ne kadar alakalı olduğundan emin değil misiniz?
mgalgs

2
@mgalgs Kendimi jqbazı verilere filtre uygulamak için orta / uç yerine bir kabuk boru hattının başlangıcında üretmek / kullanmak isteyen buldum . curlÖrnek basit olanıdır, ama ben JSON verilerinde kendimi sık elle yazarak buldum curlben de başkalarına yararlı olabileceğini düşündük bu yüzden, ve sağ alıntı almaya çalışırken.
mkobit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.