कैसे बैश लाइन CURL में पर्यावरण चर को शामिल करें?


39

पूरा होने पर सूचित करने के लिए ट्रांसमिशन प्राप्त करने की कोशिश करना।

यह काम:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "$TR_TORRENT_NAME", \
  "body": "$TR_TORRENT_NAME completed."}'

... सिवाय इसके कि धक्का $TR_TORRENT_NAMEऔर उस चर की वास्तविक सामग्री को नहीं।

क्या मुझे कुछ बोली या कुछ से बचने की आवश्यकता है?

जवाबों:


58

सिंगल-कोट्स के अंदर, शेल कुछ भी नहीं फैलता है। इसके बजाय उन्हें दोहरे उद्धरणों के अंदर रखें:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": "'"$TR_TORRENT_NAME completed"'."}'

आइए देखें कि यह कैसे काम करता है:

$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}

जब शेल वैरिएबल दिखाई देता है, तो यह हमेशा डबल-कोट्स के अंदर होता है। नतीजतन, यह ठीक से विस्तारित है।

इस तरह उद्धृत करना थोड़ा सूक्ष्म है। हमारे पास एकल-उद्धृत स्ट्रिंग्स हैं जिनमें दोहरे-उद्धरण वर्ण के रूप में हैं और दोहरे-उद्धृत स्ट्रिंग्स के बगल में हैं। इसे बेहतर समझने के लिए, आइए इस टुकड़े को एक उदाहरण के रूप में लेते हैं:

 "'"$TR_TORRENT_NAME"'"

प्रत्येक चरित्र को बदले में लेना:

  1. "एक शाब्दिक डबल-उद्धरण वर्ण है जो एकल-उद्धृत स्ट्रिंग के अंदर है। (संक्षिप्तता के लिए, इस खंड की शुरुआत इस टुकड़े में नहीं दिखाई गई है।)

  2. ' एकल-उद्धृत स्ट्रिंग बंद कर देता है।

  3. " एक डबल-उद्धृत स्ट्रिंग खोलता है।

  4. $TR_TORRENT_NAME एक शेल वैरिएबल है जो डबल-कोट्स के अंदर विस्तारित है।

  5. " डबल-उद्धृत स्ट्रिंग बंद कर देता है।

  6. ' एक नया एकल-उद्धृत स्ट्रिंग खोलता है।

  7. " एकल-उद्धृत स्ट्रिंग के अंदर एक दोहरे-उद्धरण वर्ण रखता है।


क्या आपको चरण 3 और 5 की आवश्यकता है?
davidfrancis

@davidfrancis यदि कोई चरण 3 और 5 को छोड़ देता है, तो चरण 4 शब्द विभाजन और pathname विस्तार के अधीन है और या तो कोई भी सभी परेशानी का कारण बन सकता है। जब तक कोई स्पष्ट रूप से शब्द विभाजन और पथनाम विस्तार नहीं चाहता है , एक शेल चर हमेशा डबल-कोट्स के अंदर होना चाहिए।
जॉन 1024

इसके लिए धन्यवाद, क्या आप कृपया एक त्वरित उदाहरण दे सकते हैं? इसने अपने स्वयं के उदाहरण में काम किया, यही कारण है कि मैंने पूछा, लेकिन वहाँ कोई जगह या कुछ और जटिल नहीं थे
davidfrancis

@davidfrancis कोशिश करो TR_TORRENT_NAME="A * B"और देखो क्या होता है।
जॉन १०२४ २४

1

चर सामग्री के आसपास उद्धरण के बिना एक बैश लाइन कर्ल में एक पर्यावरण चर को शामिल करने के लिए, इसने मेरे लिए काम किया:

--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''

या उस परिदृश्य का उपयोग करना जो पहले शरीर क्षेत्र के आसपास के उद्धरणों के बिना वर्णित था:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": '"$TR_TORRENT_NAME completed"'.}'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.