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.