2012-11-27 12 views
6

मैं कुछ सी ++ कोड है कि उम्मीद है कि यह इस तरह देखने के लिए कमांड लाइन है है:कमांड लाइन तर्कों में ग्रहण और उद्धरण?

/path/to/exe -p: parameterName = "[/ path/to/एक/फ़ाइल,/path/to/अन्य/फ़ाइल] "

उद्धरण चिह्न समेत। वे सिंगल या डबल कोट्स हो सकते हैं, लेकिन वे वहां होना चाहिए। ग्रहण में यदि मैंने कमांड लाइन तर्क (डीबग कॉन्फ़िगरेशन/तर्क) सेट अप किया है और उपरोक्त कमांड लाइन विकल्प दर्ज करें (minus/path/to/exe) ग्रहण उद्धरण खाता है। चूंकि मैं इसे लिनक्स पर चला रहा हूं, इसलिए स्क्वायर ब्रैकेट शेल दुःख देते हैं, और यह कभी भी मेरे कोड में नहीं बनाता है।

अगर मैं की स्थापना आदेश पंक्ति इस प्रकार args:

"इस उद्धृत किया गया है"

argv [1] इस तरह दिखता है:

इस उद्धरण के बिना

यानी उद्धृत किया गया है । अगर मैं कमांड लाइन इस प्रकार की स्थापना:

\

"इस \ उद्धृत किया गया है" मैं मिलता है:

argv[1]: "this 
argv[2]: is 
argv[3]: quoted" 

अगर मैं वर्ग कोष्ठक डाल करने के लिए यह खोल देने के लिए वापस चला जाता है में कोशिश दु: ख है, भले ही मैं उन्हें भागने की कोशिश:

\"\[this is quoted\]\" 

मैं कैसे बता ग्रहण मेरी आदेश पंक्ति तर्क लेने के लिए बिल्कुल के रूप में मैं उन्हें अपने द्वारा दिए गए हैं?

धन्यवाद

उत्तर

0

आप पहले से ही

"\"\[this is quoted\]\"" 

की कोशिश की?

बीटीडब्ल्यू: यह ग्रहण मुद्दा नहीं है बल्कि केवल खोल के व्यवहार को दर्शाता है।

+0

मैंने नहीं किया, लेकिन मैंने अभी किया। एक अच्छी कोशिश है, लेकिन अभी भी मैं क्या नहीं कर रहा हूँ। मैंने पाया कि "gdb traces" कंसोल विंडो में यह मुझे ग्रहण की gdb के साथ वार्तालाप दिखाता है और वहां मैं इसे इस आदेश को जारी कर देख सकता हूं: –

+0

(क्षमा करें - मेरा संपादन बाधित हो गया है)

मैंने नहीं किया, लेकिन मैंने अभी किया। एक अच्छी कोशिश है, लेकिन अभी भी मैं क्या नहीं कर रहा हूँ। मैंने पाया कि "जीडीबी निशान" कंसोल विंडो में यह मुझे ग्रहण की जीडीबी के साथ वार्तालाप दिखाता है और वहां मैं इसे 'सेट तर्क "जारी कर सकता हूं \" \\ [यह उद्धृत किया गया है \\] \ "" '। मुझे एहसास है कि शेल गैर-बच निकले ब्रैकेट का अर्थ है, लेकिन यह ग्रहण है जो मैंने इसे कमांड लाइन के रूप में उपयोग करने के लिए कहा है। यदि मैं एक वास्तविक कमांड लाइन पर एक ही पाठ दर्ज करता हूं तो यह अपेक्षित काम करता है - argv में कोई उद्धरण नहीं है, लेकिन ब्रैकेट अनचाहे के माध्यम से गुजरते हैं। –

+1

@ जी-makulik: मेरा मानना ​​है कि यह एक ग्रहण/सीडीटी मुद्दा है। मैं लिनक्स जीटीके और एक्लिप्स इंडिगो पर इस समस्या में भाग गया। सीडीटी डीबग कॉन्फ़िगरेशन के तर्क टैब में दर्ज रिक्त स्थान के साथ प्रोग्राम तर्कों के चारों ओर डबल-कोट्स ग्रहण/एमआई द्वारा सही ढंग से सेट नहीं होते हैं जब यह gdb के माध्यम से सेट-args होता है। आपको सिंगल कोट्स का उपयोग करना होगा। साथ ही, यह एक धागा है कि यह विंडोज़ पर भी काम नहीं करता है: http://www.eclipse.org/forums/index.php/t/175270/ मुझे बैश खोल से प्रोग्राम चलाने का सही व्यवहार मिलता है, लेकिन नहीं ग्रहण डीबग लॉन्चर्स। – timblaktu

2

I सोचें मुझे एक समाधान मिला है - कम से कम इसने कई बार पंक्ति में काम किया है। gdb के "आर्ग सेट" कमांड में

-p:parameterName='[foo,bar]' 

:

-p:parameterName="'[foo,bar]'" 

इस में बदल जाता है: ग्रहण के पक्ष में दलील टैब में, "कार्यक्रम तर्क" क्षेत्र में कमांड लाइन पैरामीटर के रूप में निम्नानुसार दर्ज करें। मैं वर्ग-ब्रैकेट अभिव्यक्ति के चारों ओर एकल उद्धरण के साथ हवादार हूं लेकिन यह मेरे आवेदन के लिए ठीक है। मुझे नहीं पता कि यह क्यों काम करता है (मेरी इच्छा है कि मैंने किया) या पाठ से बचने के अन्य तरीके क्यों विफल रहे।

डबल & एकल उद्धरण के मामले का मामला महत्वपूर्ण है। यदि आप बाहर सिंगल कोट्स डालने का प्रयास करते हैं तो यह

set args -p:parameterName=\"[foo,bar]\" 

में विफल हो जाता है। सुनिश्चित नहीं है कि डबल कोट्स की आवश्यकता होने पर मैं क्या करूँगा।

+0

बहुत बहुत धन्यवाद * वास्तव में * सहायक था। –

2

मैंने इसे ठीक किया, इसलिए अब तर्क प्रदान करने के लिए स्पष्ट नियम हैं। के लिए कैसे नियमों

https://bugs.eclipse.org/bugs/show_bug.cgi?id=474648

मुख्य सिद्धांतों भागो और डीबग ही व्यवहार करने के लिए होती है, तर्क मुख्य रूप से क्या कार्यक्रम है और पार्टी द्वारा प्राप्त होता है रहे हैं, और: आप यहाँ विस्तार से इस बारे में पढ़ सकते हैं तर्क प्रदान करने के लिए सरल और सहज होना चाहिए। प्रत्येक तर्क को समाप्त करने के लिए एक स्ट्रिंग का उपयोग करते समय नियमों से पूरी तरह से बचना असंभव है, कुछ विशेष अंकन अनिवार्य है।

तो, तर्क निम्नलिखित तरीके से काम करते हैं:

  • एक बैकस्लैश निम्नलिखित किसी भी चरित्र सचमुच इलाज किया और विशेष अर्थ खो देता है है।

  • उद्धरण के बाद कोई भी चरित्र और अगले मिलान उद्धरण (या ईओएफ) से पहले वर्णित रूप से व्यवहार किया जाता है और विशेष अर्थ (एकल और डबल दोनों) खो देता है।

  • व्हाइट स्पेस (जब तक बच निकला या उद्धरण के भीतर) तर्क डेलिमीटर के रूप में उपयोग किया जाता है।

पिछला व्यवहार काफी अपरिभाषित था के रूप में `date` की तरह कुछ बैश द्वारा subbed किया जाएगा और अभी तक व्यवहार हमेशा पार्टी के समान नहीं था। यह कुछ उपयोगकर्ताओं को हैकी कॉन्फ़िगरेशन को बर्बाद कर सकता है लेकिन अब पुनः लिखना मामूली है, जबकि परीक्षण के माध्यम से सही स्ट्रिंग को पाया जाना था और उद्धरण से बचने के विभिन्न संयोजनों के साथ त्रुटि, "क्या मुझे एक, दो या चार बैकस्लैश चाहिए?"।

+0

यह चाहता था, अब, रात में सीडीटी प्रत्येक पैरामीटर के चारों ओर सिंगल कोट्स जोड़ता है। डीबग कॉन्फ़िगरेशन तर्कों में ए बी सी एआरजीवी में मुझे 'ए' 'बी' 'सी' मिला। ? – Gabor

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