मैं एक .bat स्क्रिप्ट में URL पर उद्धरण कैसे लागू कर सकता हूं?


0

CMD में काम करने वाले कर्ल कमांड का सामान्य रूप है:

कर्ल -ओ latest.dump एल " https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/xxxx.dump?AWSAccessKeyId=AKIAJSCBEZJRDOTGNGZQ&Expires=1411489500&Signature=%2F5zwQNZNN0H2XSR4wSqQ%2FFExBdI%3D "

लेकिन url गतिशील रूप से उत्पन्न होता है इसलिए मेरे लिए इसे .bat स्क्रिप्ट में रखना चाहिए। ठीक है, कोई समस्या नहीं है इसलिए यहाँ मेरी .bat स्क्रिप्ट है कि कागज पर काम करना चाहिए।

@echo off

for /f "delims=" %%a in ('heroku pgbackups:url') do @set this_url=%%a
ECHO %this_url%
curl -v -o latest.dump -L %this_url%

लेकिन आउटपुट की घंटी बजती है क्योंकि पहले 'और' के रूप में आप उम्मीद कर सकते हैं। की गूंज this_urlसे पता चलता है उद्धरण के साथ पूर्ण स्ट्रिंग। मैं इस स्ट्रिंग को उद्धरणों के साथ संलग्न करने के लिए कैसे अपील कर सकता हूं या मजबूर कर सकता हूं?

मैंने प्रयास किया है लेकिन यह उसी प्रकार की त्रुटि देता है:

cmd /k ""curl -v -o latest.dump -l" "('heroku pgbackups:url')""

कुछ पूछ सकते हैं कि यूनिक्स या CYGWIN में ऐसा क्यों नहीं करते? मैंने वो पहले किया। कमांड मेरे ओएस एक्स पर्सनल मशीन पर पूरी तरह से काम करता है। तो यह CYGWIN में काम करना चाहिए? वैसे मुझे एक ही तरह की त्रुटियाँ मिलती हैं।

मैंने uri_escapeलाइब्रेरी का उपयोग करके एक पर्ल स्क्रिप्ट शामिल करने का प्रयास किया है और इसे डाला है। लेकिन यह जिस URL से गुजरता है वह कर्ल द्वारा पहचाना नहीं जाता है।

एकल उद्धरणों के भीतर आउटपुट को मजबूर करना URL को सही करता है, लेकिन समापन एकल उद्धरण URL के अंतिम कुछ वर्णों के भीतर रखा जाता है जो इसे कर्ल करने के लिए बेकार कर देता है।

heroku pgbackups:urlCMD कंसोल का आउटपुट है:

"https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccess
KeyId=AKIAJSCBEZJRDOTGNGZQ&Expires=1411657655&Signature=MqzqBitAN7MADiLAsdAN4ZQk
RH0%3D"

ऊपर .bat फ़ाइल का आउटपुट है:

https://s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccessK
eyId=AKIAJSCBEZJRDOTGNGZQ
'Expires' is not recognized as an internal or external command,
operable program or batch file.
'Signature' is not recognized as an internal or external command,
operable program or batch file.
* About to connect() to s3.amazonaws.com port 443 (#0)
*   Trying 205.251.243.66...   % Total    % Received % Xferd  Average Speed   Ti
me    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0co
nnected
* Connected to s3.amazonaws.com (205.251.243.66) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Server hello (2):
{ [data not shown]
* SSLv3, TLS handshake, CERT (11):
{ [data not shown]
* SSLv3, TLS handshake, Server finished (14):
{ [data not shown]
* SSLv3, TLS handshake, Client key exchange (16):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Finished (20):
} [data not shown]
* SSLv3, TLS change cipher, Client hello (1):
{ [data not shown]
* SSLv3, TLS handshake, Finished (20):
{ [data not shown]
* SSL connection using AES128-SHA
* Server certificate:
*        subject: C=US; ST=Washington; L=Seattle; O=Amazon.com Inc.; CN=s3.amazo
naws.com
*        start date: 2014-04-12 00:00:00 GMT
*        expire date: 2015-04-13 23:59:59 GMT
*        subjectAltName: s3.amazonaws.com matched
*        issuer: C=US; O=VeriSign, Inc.; OU=VeriSign Trust Network; OU=Terms of
use at https://www.verisign.com/rpa (c)10; CN=VeriSign Class 3 Secure Server CA
- G3
*        SSL certificate verify result: unable to get local issuer certificate (
20), continuing anyway.
> GET /hkpgbackups/app28197640@heroku.com/b080.dump?AWSAccessKeyId=AKIAJSCBEZJRD
OTGNGZQ HTTP/1.1
> User-Agent: curl/7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.
2.5
> Host: s3.amazonaws.com
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< x-amz-request-id: 4566C5AB208C1248
< x-amz-id-2: zF/zr+fbR/pE7nvF7vvUmOdZQeMzjSBI6SPLKH14LGAI5JAb2xyoLhuuDGBDhqcq
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Date: Thu, 25 Sep 2014 14:51:46 GMT
< Server: AmazonS3
<
{ [data not shown]
100   231    0   231    0     0    592      0 --:--:-- --:--:-- --:--:--   704
* Connection #0 to host s3.amazonaws.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
} [data not shown]
'Expires' is not recognized as an internal or external command,
operable program or batch file.
'Signature' is not recognized as an internal or external command,
operable program or batch file.

403 त्रुटि इंगित करती है कि url मुंग गया था, लेकिन अन्यथा यह गुजरता था या मुझे 400 त्रुटि मिली होगी। स्क्रिप्ट में किसी कारण से, "&" पुनर्निर्देशित हो जाते हैं क्योंकि उन्हें स्क्रिप्ट में व्याख्या की जाती है।

यदि आप मेरे थे, तो आप इस कमांड को गतिशील रूप से इस URL को कैसे चलाएंगे, इसलिए इसकी व्याख्या CMD, bash, आदि द्वारा नहीं की जाती है? thanx, सैम


क्या आप ECHO कमांड का परिणाम दिखा सकते हैं जो ठीक दिखता है, फिर भी कर्ल के साथ उपयोग किए जाने पर मान विफल हो जाता है? कुछ मतलब नहीं है। यदि आप मूल्य ग्रहण कर सकते हैं, और यह उद्धरणों में संलग्न है, तो इसे कर्ल के साथ भी काम करना चाहिए।
debhamham

हां, कुछ मतलब नहीं है। ECHO% this_url% रिटर्न " s3.amazonaws.com/hkpgbackups/app28197640@heroku.com/ ... "।
sam452

मुझे समझ नहीं आया कि "कर्ल -वर्बोज़ विकल्प का आउटपुट क्या है: ..." आपके पोस्ट किए गए कोड से संबंधित है। आपके मूल रूप से पोस्ट की गई बैच स्क्रिप्ट का सटीक आउटपुट क्या है?
डेबनहम

जवाबों:


0

मूल रूप से पोस्ट की गई स्क्रिप्ट को देखते हुए:

@echo off

for /f "delims=" %%a in ('heroku pgbackups:url') do @set this_url=%%a
ECHO %this_url%
curl -v -o latest.dump -L %this_url%

यदि ECHO %this_url%आपके द्वारा पोस्ट किए गए उद्धरणों के साथ, जैसा कि आउटपुट पोस्ट किया गया है, तो आपके मौजूदा बैच स्क्रिप्ट को काम करना चाहिए।

यदि मान का %this_url%उद्धरण नहीं है, तो आपको कर्ल कमांड में उद्धरण जोड़ना चाहिए:

curl -v -o latest.dump -L "%this_url%"

आप यह सुनिश्चित करने के लिए आदेश को संशोधित कर सकते हैं कि चाहे वह %this_url%किसी भी मौजूदा उद्धरण को हटाकर उद्धरण शामिल हो, और स्पष्ट रूप से अपना खुद का जोड़कर काम करे:

curl -v -o latest.dump -L "%this_url:"=%"

आपके द्वारा सूचीबद्ध अन्य कमांड मेरे लिए पूरी तरह से गलत है:

cmd /k ""curl -v -o latest.dump -l" "('heroku pgbackups:url')""

बाहरी उद्धरणों की आवश्यकता नहीं होनी चाहिए, और न ही उद्धरणों के आसपास होना चाहिए "curl -v -o latest.dump -l"। आप केवल exe फ़ाइल के चारों ओर उद्धरण डाल सकते हैं "curl", लेकिन इसकी आवश्यकता तब तक नहीं होनी चाहिए जब तक कि आप कर्ल के पथ को शामिल न करें और पथ में रिक्त स्थान या विष वर्ण शामिल हों।

मुझे "('heroku pgbackups:url')"सिंटैक्स बिल्कुल समझ में नहीं आता है ।


हाँ, इसके माध्यम से मुझे चलने के लिए धन्यवाद। कमांड heroku pgbackups का आउटपुट: url अतिरिक्त लंबे url का उत्पादन करता है। मैंने आपके आदेश को स्पष्ट रूप से जोड़ने के लिए अपने स्वयं के उद्धरण जोड़ने का प्रयास किया है, जैसा कि ऊपर दिया गया है: प्रत्येक "और" के लिए कमांड में पार्सर प्रत्येक को एक अलग कमांड के रूप में पढ़ रहा है और कर्ल विफल रहता है। यह पता चला है कि प्रत्येक URL में बेक किए गए अमेज़ॅन प्रमाणीकरण का हिस्सा है। मैंने उन भागों में से प्रत्येक को अलग-अलग चर में कैद करने का प्रयास किया था और उन्हें आज्ञा में समाहित किया था, लेकिन किसी कारण से यह केवल एक चर को समाप्‍त करेगा।
sam452

समस्या यह है कि इस लंबे URL के लिए Windows एक गाड़ी वापसी जोड़ रहा है जो URL को कम से कम, साइबरविन में शामिल करता है। तो मैं इसे cygwin में चलाने के लिए पा सकते हैं, जो कि doku2unix को heroku कमांड का आउटपुट देता है। जैसा कि सीएमडी में काम करने के लिए मिलता है, लेकिन शायद इसका जवाब नहीं है, लेकिन यह अब साइबरविन में काम करता है।
sam452
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.