मैं कर्ल का उपयोग करके एक एपीआई में लॉग इन करने का प्रयास कर रहा हूं। क्योंकि अनुरोध JSON से उम्मीद करता है, मैं इसका उपयोग कर रहा हूं:
curl -s -X POST -H "Content-Type: application/json" \
$API_URL/auth -d@- <<EOF
{
"id": "$USER@example.com",
"password": "!password!"
}
EOF
... और वह ठीक काम कर रहा है। मुझे एक परिणाम मिलता है जो कुछ इस तरह दिखता है:
{"access_token":"jXed...I5mQ=","expires_in":3600}
लेकिन जब मैं एक चर में आउटपुट को पकड़ने का प्रयास करता हूं, तो यह काम नहीं करता है।
मैंने कोशिश की:
x=$(curl ...)
... लेकिन वह विफल रहता है bash: !password!: event not found
हाँ, मेरा पासवर्ड है एक के साथ शुरू !; यह एपीआई की एक परीक्षण स्थापना है, इसलिए मैं एक कमजोर पासवर्ड का उपयोग कर रहा हूं।
मुझे पता है कि अगर मैं इसका उपयोग करता हूं set +H, या इसे स्क्रिप्ट से चलाता हूं , तो bash कुछ भी नहीं करेगा !। मेरी परेशानी यह हे कि मे:
- मैं कभी-कभी स्क्रिप्ट को कमांड लाइन में कॉपी-पेस्ट करना चाहता हूं। छह महीने के समय में, मैं इस शिकन के बारे में भूल गया हूँ।
- बैश भी एक वंशानुगत के अंदर ऐसा करने का प्रयास क्यों कर रहा है?
इसके साथ पूर्वोक्त विचित्रता के कारण !, मैंने परिणामों को readइसके बजाय पाइप करने की कोशिश की :
(curl ...
EOF
) | read x
... लेकिन फिर यह किसी भी तरह हेरेडोक का प्रबंधन करता है, और सर्वर "अमान्य JSON" के बराबर प्रतिक्रिया करता है।
अगर मैं catइसके बजाय का उपयोग करता हूं curl, तो हेरेडोक संयोगवश खाली दिखता है।
catऔर हेरेडोक की कोशिश की है और इस व्यवहार को पुन: पेश नहीं कर सकता , जीबीयू बैश का उपयोग करके , संस्करण 4.3.11 (1)-Ubuntu पर -release ।