2016-01-26 8 views
23

में अवैध पात्र पाए गए हैं, इसलिए मेरे पास एक बहुत ही सरल बैश स्क्रिप्ट है जो हेडर के लिए ऑथ सर्वर पर कर्लिंग कर रही है। हेडर यूआरएल एक var पर लिखा गया है और फिर अगले कर्ल कॉल में उपयोग किया जाता है। पहली कर्ल कॉल में var set का उपयोग करते समय मुझे "curl: (3) URL में मिले अवैध वर्ण मिल रहे हैं"। मैं var को प्रतिबिंबित करने में सक्षम हूं और सभी अच्छे दिखते हैं, मैं var (मेरे नीचे दिए गए उदाहरण में) को रीसेट करने में भी सक्षम हूं और यह काम करता है।एक बैश स्क्रिप्ट में कर्ल का उपयोग करके और कर्ल प्राप्त करना: (3) यूआरएल

बैश स्क्रिप्ट

URL=$(curl -i -X GET -H "X-Auth-User: MyUserna,e" -H "X-Auth-Key: MyAPIKey" "https://urlToAuthServer.tld/auth/v1.0/" | grep "X-Storage-Url:" | awk '{print $2}') 

curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt 

जब ऊपर के उदाहरण चल रहा मिलती है:

curl: (3) Illegal characters found in URL 

यूआरएल वर इस तरह दिखता है (कोई अवैध वर्ण)

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534 

जब मैं टर्मिनल में ऐसा काम करता है:

$ यूआरएल = $ (कर्ल मैं -X प्राप्त एच "एक्स-प्रमाणीकरण-उपयोगकर्ता: MyUserna, ई" एच "एक्स-Auth- कुंजी: मायापीकी "" https://urlToAuthServer.tld/auth/v1.0/ "| grep "एक्स-स्टोरेज-यूआरएल:" | awk फिर से सभी टर्मिनल में) '{$ 2 प्रिंट}')

$ $ यूआरएल गूंज

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

अब मैं कॉपी और स्ट्रिंग पेस्ट करें और इसे reasign तो जैसे URL पर (:

यह काम करता है।

तो मुझे "कर्ल: (3) यूआरएल में मिले अवैध पात्र क्यों मिल रहे हैं" पहले उदाहरण में त्रुटि?

अद्यतन मैं इस भाग गया: printf %s "$URL" | xxd

यहाँ निर्गम (विचार बदल संबोधित आपको मिल) है

0000000: 6874 7470 733a 2f2f 6461 6c30 352e 6f62 https://server.ob 
0000010: 6a65 6374 7374 6f72 6167 652e 736f 6674 jectstorage.lite 
0000020: 6c61 7965 722e 6e65 742f 7631 2f41 5554 sabers.com/v1/AUT 
0000030: 485f 6665 3235 3339 3434 2d38 6433 322d H_aE2563981-7d32- 
0000040: 3432 3138 2d61 6566 632d 6665 6638 3465 4201-bdoi-fef94a 
0000050: 6166 3331 6232 0d      ag11c8. 
+0

यूआरएल में किसी भी सफेद जगह, न्यूलाइन, छुपे हुए पात्र? 'Printf% s" $ URL के साथ आज़माएं " xxd'। – choroba

+0

@ चोरोबा, मुझे एक "।" मिल रहा है। अंत में: 0000050: 6166 3331 6232 0 डी af31b2। आउटपुट में अंतिम पंक्ति है। – gregwinn

उत्तर

51

$ यूआरएल एक \r अंत में (सीआर) शामिल (0d)।

URL=${URL%$'\r'} 

curl के साथ इसका उपयोग करने से पहले इसे हटा दें।

+2

आपको बहुत बहुत धन्यवाद! यह काम करता है! – gregwinn

+0

मैं समझता हूं कि पैरामीटर विस्तार% के साथ '$' \ r'' को एक पैटर्न में फैलाता है और फिर यूआरएल से उस पैटर्न को हटा देता है। लेकिन 'आर' से पहले $ की आवश्यकता क्यों है? – Noumenon

+2

@ न्यूमेन: क्योंकि '' \ r'' दो अक्षर हैं, बैकस्लैश और 'आर', जबकि' $ '\ r'' एक चरित्र है, सीआर। '$ '...'' ''से अलग उद्धरण हैं ...' '। – choroba