Bagaimana cara menggunakan nama file yang diawali dengan tanda hubung “-” sebagai argumen perintah?

20

Ini mungkin pertanyaan sederhana, tetapi bagaimana cara menggunakan file yang dimulai dengan "-" dengan program baris perintah?

Sebagai contoh, saya mencoba untuk menggunakan pdfgrepfile bernama -2013-01-01.pdftetapi mengeluh bahwa tidak ada opsi yang ditentukan untuk 2, 0, 1, 3 dan seterusnya.

Mengubah nama file menjadi sesuatu yang tidak dimulai dengan "-" menyelesaikannya, tetapi ini bukan pilihan karena file tidak dibuat oleh saya. Saya hanya ingin memeriksa perubahan spesifik yang saya tahu akan datang.

Kristoffer
sumber
dos ini tidak berfungsi, memberi saya kesalahan yang sama seperti sebelumnya
Kristoffer
3
Sebagai contoh grep -i dfv -- -myfile1 -myfile2,.
itu bekerja! Terima kasih! buat itu n jawab dan saya bisa menandainya sebagai diterima untuk generasi masa depan :)
Kristoffer
@AliNa, apakah menggunakan tanda kutip bekerja untuk Anda dengan pdfgrep secara khusus? Itu tidak berhasil untuk saya. Saya menggunakan Lubuntu.
4
@ AliNa: Tanda kutip tidak akan berfungsi, karena mereka ditafsirkan oleh shell, bukan program.
hammar

Jawaban:

22

Sangat sering --digunakan pada command-line untuk memberi sinyal ke suatu program yang tidak lagi menggunakan perintah yang akan digunakan. Ini sangat berguna jika file berisi tanda hubung, yang akan coba ditafsirkan oleh program sebagai opsi.

  1. Tanpa itu --, ada kesalahan yang dihasilkan:

    $ 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. Dengan yang --digunakan kami memiliki perintah yang sukses:

    $ 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. pdfgrepdiprogram untuk memahami --artinya bahwa argumen baris perintah berikut ini bukan opsi. Sebagian besar program melakukan hal yang sama, tetapi tidak semua program mengerti-- . Untuk program yang tidak, solusinya adalah dengan mengawali nama file dengan ./, seperti ini:

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

    Ini harus bekerja dengan perintah apa pun, kecuali karena alasan tertentu perintah tidak dapat menerima jalan, hanya nama file murni.

Untuk pengantar umum pada baris perintah, lihat PDF yang bermanfaat ini .

Flimm
sumber
4
Sayangnya, --tidak tidak bekerja dengan semua program baris perintah. Saya berasumsi dari komentar OP itu bahwa pdfgrepsalah satunya tidak mengenali --. Tetapi penerimaan di sini menyarankan sebaliknya. Bagaimanapun, program harus dikodekan untuk dikenali --. Banyak program menggunakan pustaka untuk menguraikan argumen mereka, yang memang mengenali --. Tetapi ada yang tidak, dan ada yang tidak dikodekan untuk dikenali --.
Eliah Kagan
3
Untuk program-program yang tidak mengenali --solusi yang biasa adalah meletakkan ./di depan file:pdfgrep ./-2013-01-01.pdf
Carlos Campderrós
2
Ya, menempatkan ./di depan adalah solusi yang paling portabel dan tangguh. Bekerja pada program apa pun, pada versi unix apa pun.
hlovdal
16

Anda menambahkan nama file dengan ./(atau jalur relatif atau absolut lain yang berfungsi). Dengan cara ini portabel.

Contoh:

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

Penggunaan --untuk menunjukkan akhir opsi tidak selalu tersedia. Beberapa perintah akan mengetahuinya, beberapa tidak. Dan ini akan berubah di berbagai sistem. Jadi pada akhirnya, ini kurang portabel.

Olivier Dulac
sumber