कमांड तर्कों के रूप में मैं उन फ़िल्नाम का उपयोग कैसे करता हूं जो डैश "-" से शुरू होते हैं?


20

यह एक सरल प्रश्न हो सकता है, लेकिन मैं कमांड लाइन प्रोग्राम के साथ "-" से शुरू होने वाली फ़ाइलों का उपयोग कैसे करूं?

उदाहरण के लिए, मैं pdfgrepनाम की एक फाइल पर उपयोग करने की कोशिश कर रहा हूं, -2013-01-01.pdfलेकिन यह शिकायत करता है कि 2, 0, 1, 3 और इतने पर परिभाषित कोई विकल्प नहीं हैं।

फ़ाइल नाम को किसी ऐसी चीज़ में बदलना जो "-" के साथ शुरू नहीं होती है, लेकिन इसे हल करती है, लेकिन यह एक विकल्प नहीं है क्योंकि फाइलें मेरे पास नहीं हैं। मैं बस एक विशिष्ट परिवर्तन के लिए जांच करना चाहता हूं जो मुझे पता है कि आ रहा है।


यह डॉस काम नहीं करता, मुझे पहले की तरह ही त्रुटियां देता है
क्रिस्टोफ़र

3
उदाहरण के लिए, grep -i dfv -- -myfile1 -myfile2

यह काम करता है! धन्यवाद! इसे n उत्तर दें और मैं इसे भावी पीढ़ियों के लिए स्वीकृत के रूप में चिह्नित कर सकता हूं :)
क्रिस्टोफ़र

@ अलीना, क्या आपने pdfgrep के साथ विशेष रूप से उद्धरण के लिए काम किया था? यह मेरे लिए काम नहीं किया। मैं लबंटू का उपयोग कर रहा हूं।

4
@ अलीना: उद्धरण चिह्न काम नहीं करेंगे, क्योंकि उन्हें शेल द्वारा व्याख्यायित किया जाता है, कार्यक्रम नहीं।
हमर

जवाबों:


22

--किसी प्रोग्राम को संकेत करने के लिए कमांड-लाइन पर बहुत बार उपयोग किया जाता है कि अधिक उपलब्ध कमांड स्विच का उपयोग नहीं किया जाएगा। यह विशेष रूप से उपयोगी है यदि किसी फ़ाइल में डैश होता है, जिसे प्रोग्राम एक विकल्प के रूप में व्याख्या करने की कोशिश करेगा।

  1. इसके बिना --, एक त्रुटि उत्पन्न होती है:

    $ pdfgrep -i posix -find.pdf -xorg.pdf
    
    pdfgrep: invalid option -- 'f'
    pdfgrep: invalid option -- 'd'
    pdfgrep: invalid option -- '.'
    pdfgrep: invalid option -- 'p'
    pdfgrep: invalid option -- 'd'
    pdfgrep: invalid option -- 'f'
    
  2. --उपयोग के साथ हमारे पास एक सफल कमांड है:

    $ pdfgrep -i posix -- -find.pdf -xorg.pdf
    
    -find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    
  3. pdfgrepयह समझने के --लिए प्रोग्राम किया गया है कि निम्नलिखित कमांड-लाइन तर्क विकल्प नहीं हैं। अधिकांश कार्यक्रम ऐसा ही करते हैं, लेकिन सभी कार्यक्रम समझ में नहीं आते हैं-- । ऐसा न करने वाले कार्यक्रमों के लिए, फ़ाइल नाम ./इस तरह से प्रस्तुत करना है:

     pdfgrep -i posix ./-find.pdf ./-xorg.pdf
    

    यह किसी भी कमांड के साथ काम करना चाहिए, जब तक कि किसी कारण से कमांड एक पथ को स्वीकार नहीं कर सकता, केवल एक शुद्ध फ़ाइल नाम।

कमांड-लाइन के सामान्य परिचय के लिए, यह उपयोगी पीडीएफ देखें


4
दुर्भाग्य से, सभी कमांड-लाइन कार्यक्रमों के साथ काम नहीं-- करता है। मैंने ओपी की उस टिप्पणी से मान लिया था जो उनमें से एक है जो पहचान नहीं करता है । लेकिन यहाँ स्वीकार अन्यथा सुझाव देता है। किसी भी मामले में, एक कार्यक्रम को पहचानने के लिए कोडित होना चाहिए । कई कार्यक्रम अपने तर्कों को पार्स करने के लिए पुस्तकालयों का उपयोग करते हैं, जो पहचानते हैं । लेकिन कुछ, और उनमें से कुछ को पहचानने के लिए कोड नहीं किया गया है । pdfgrep--------
एलिया कागन

3
उन कार्यक्रमों के लिए जो --सामान्य वर्कअराउंड को नहीं पहचानते हैं , ./वे फ़ाइल के सामने रख रहे हैं:pdfgrep ./-2013-01-01.pdf
कार्लोस कैंपड्रेस्स

2
हां, ./सामने रखना सबसे पोर्टेबल और मजबूत समाधान है। किसी भी प्रोग्राम पर, किसी भी यूनिक्स संस्करण पर काम करता है।
हवलदार

16

आप फ़ाइल नाम ./(या किसी अन्य रिश्तेदार या पूर्ण पथ जो काम करता है) के साथ प्रस्तुत करते हैं। इस तरह यह पोर्टेबल है।

उदाहरण:

for zefile in ./*.tmp
do
   rm -f "$zefile"
done

--विकल्पों के अंत को इंगित करने का उपयोग हमेशा उपलब्ध नहीं होता है। कुछ कमांड इसे जानेंगे, कुछ नहीं। और यह विभिन्न प्रणालियों में बदल जाएगा। तो अंत में, यह कम पोर्टेबल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.