2015-10-20 7 views
87

मुझे शेल पाइपलाइन में "सामान्य रूप से" व्यवहार करने के लिए jq नहीं मिल रहा है। उदाहरण के लिए: jq मेंशैल पाइपलाइन में 'jq` का उपयोग कैसे करें?

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

परिणाम बस * अपनी सहायता पाठ को प्रिंट। एक ही बात होता है अगर मैं एक फाइल करने के लिए 'jq रों उत्पादन रीडायरेक्ट करने के लिए प्रयास करें:

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

jq जानबूझ के प्रति सहिष्णु है अगर यह निर्धारित करता है कि यह एक tty से नहीं चलाया जा रहा है? मैं इस व्यवहार को कैसे रोक सकता हूं ताकि मैं पाइपलाइन में jq का उपयोग कर सकूं?


* (मुझे पता है यह उदाहरण एक useless use of cat होता है; यह चित्रण प्रयोजनों के लिए ही है)

उत्तर

158

आप एक तर्क के रूप में एक फिल्टर की आपूर्ति करने की जरूरत है। सुंदर मुद्रण jq डिफ़ॉल्ट रूप से प्रदान करता है की तुलना में असंशोधित अन्य के माध्यम से JSON पास करने के लिए, पहचान फिल्टर . का उपयोग करें:

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

क्यों पाइप "बिल्ली" के लिए? क्या यह वास्तव में जरूरी है? –

+15

मैंने इसे छोड़ दिया क्योंकि ओपी ने इसे किया था; मुझे लगता है कि यह सिर्फ एक प्लेसहोल्डर है जो इंगित करता है कि 'jq' दोनों पाइप से पढ़ रहे हैं और दूसरी पाइप पर लिख रहे हैं। यदि इच्छा केवल 'jq' के आउटपुट को देखना है, तो' बिल्ली 'स्वयं अनावश्यक है। – chepner

+3

(1) जेक संस्करण 1.5 बढ़ाया गया है ताकि। इस तरह के मामलों में अनावश्यक है। (2) "।" उद्धृत करने की कोई आवश्यकता नहीं है। – peak

3

एक उपयोग के मामले मैं अपने आप को मिल गया है और साथ ही अक्सर कर है "मैं करने के लिए JSON डेटा कैसे निर्माण करते हैं अन्य खोल आदेशों में आपूर्ति, उदाहरण के लिए curl? " तरह से मैं यह कर --null-input/-n विकल्प का उपयोग कर रहा है:

किसी भी इनपुट पढ़ने मत करो! इसके बजाय, इनपुट के रूप में null का उपयोग कर फ़िल्टर चलाया जाता है। यह उपयोगी है जब jq का उपयोग एक साधारण कैलकुलेटर के रूप में या स्क्रैच से JSON डेटा बनाने के लिए किया जाता है।

और एक उदाहरण यह curl में गुजर:

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

यह अच्छा है, लेकिन यह सुनिश्चित नहीं है कि यह इस प्रश्न के लिए प्रासंगिक कैसे है? – mgalgs

+1

@mgalgs मैंने पाया कि कुछ डेटा पर फ़िल्टर करने के लिए मध्य/अंत की बजाय शेल पाइपलाइन की शुरुआत में 'jq' उत्पन्न/उपयोग करना चाहते हैं।'Curl' उदाहरण एक मूलभूत है, लेकिन मैंने खुद को JSON डेटा में अक्सर 'curl' पर हाथ टाइपिंग और सही उद्धरण प्राप्त करने का प्रयास किया, इसलिए मैंने सोचा कि यह दूसरों के लिए भी उपयोगी हो सकता है। – mkobit

संबंधित मुद्दे