ฉันจะใช้ชื่อไฟล์ที่ขึ้นต้นด้วยเส้นประ“ -” เป็นอาร์กิวเมนต์คำสั่งได้อย่างไร


20

นี่อาจเป็นคำถามง่าย ๆ แต่ฉันจะใช้ไฟล์ที่ขึ้นต้นด้วย "-" ด้วยโปรแกรมบรรทัดคำสั่งได้อย่างไร

ตัวอย่างเช่นฉันพยายามที่จะใช้pdfgrepกับชื่อไฟล์-2013-01-01.pdfแต่มันบ่นว่าไม่มีตัวเลือกที่กำหนดไว้สำหรับ 2, 0, 1, 3 และอื่น ๆ

การเปลี่ยนชื่อไฟล์เป็นสิ่งที่ไม่ได้ขึ้นต้นด้วย "-" แก้ปัญหา แต่นี่ไม่ใช่ตัวเลือกเนื่องจากฉันไม่ได้สร้างไฟล์ ฉันแค่ต้องการตรวจสอบการเปลี่ยนแปลงเฉพาะที่ฉันรู้ว่ากำลังจะมา


สิ่งนี้ไม่ทำงานให้ฉันข้อผิดพลาดเหมือนก่อน
Kristoffer

3
ตัวอย่างเช่นgrep -i dfv -- -myfile1 -myfile2.

ที่ได้ผล! ขอบคุณ! ทำให้มัน n ตอบและฉันสามารถทำเครื่องหมายเป็นที่ยอมรับสำหรับคนรุ่นอนาคต :)
Kristoffer

@AliNa ​​การใช้เครื่องหมายคำพูดทำงานให้คุณด้วย pdfgrep โดยเฉพาะหรือไม่ มันไม่ได้ผลสำหรับฉัน ฉันใช้ Lubuntu

4
@AliNa: เครื่องหมายคำพูดจะไม่ทำงานเนื่องจากเชลล์ตีความโดยเชลล์ไม่ใช่โปรแกรม
hammar

คำตอบ:


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
    

    สิ่งนี้ควรทำงานกับคำสั่งใด ๆ ยกเว้นว่าด้วยเหตุผลบางประการคำสั่งไม่สามารถยอมรับพา ธ ได้เพียงชื่อไฟล์เท่านั้น

สำหรับคำแนะนำทั่วไปเกี่ยวกับบรรทัดคำสั่งให้ดูPDF ที่มีประโยชน์นี้


4
น่าเสียดายที่--ไม่สามารถใช้ได้กับโปรแกรมบรรทัดคำสั่งทั้งหมด ผมเคยคิดว่าจากความคิดเห็นที่โดยสหกรณ์ที่เป็นหนึ่งในพวกที่ไม่รู้จักpdfgrep --แต่การยอมรับที่นี่แสดงให้เห็นเป็นอย่างอื่น ในกรณีใด ๆ --โปรแกรมที่จำเป็นต้องใช้รหัสในการรับรู้ --หลายโปรแกรมที่ใช้ห้องสมุดที่จะแยกการขัดแย้งของพวกเขาซึ่งทำรับรู้ --แต่บางคนไม่ได้และในบรรดาบางอย่างจะไม่รหัสในการรับรู้
Eliah Kagan

3
สำหรับโปรแกรมที่ไม่รู้จัก--วิธีแก้ปัญหาตามปกติคือวางไว้./หน้าไฟล์:pdfgrep ./-2013-01-01.pdf
Carlos Campderrós

2
ใช่การวางไว้./ด้านหน้าเป็นโซลูชันที่พกพาได้และแข็งแกร่งที่สุด ทำงานได้กับทุกโปรแกรมในยูนิกซ์ทุกรุ่น
hlovdal

16

คุณเติมชื่อไฟล์ด้วย./(หรือพา ธ สัมพัทธ์หรือพา ธ สัมบูรณ์ที่ใช้งานได้) วิธีนี้มันพกพาได้

ตัวอย่าง:

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

การใช้--เพื่อระบุจุดสิ้นสุดของตัวเลือกนั้นอาจไม่สามารถใช้งานได้ตลอดเวลา คำสั่งบางคำจะรู้ และสิ่งนี้จะเปลี่ยนไปตามระบบต่างๆ ดังนั้นในที่สุดมันก็พกพาได้น้อยลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.