Làm cách nào để sử dụng tên tệp bắt đầu bằng dấu gạch ngang - Hồi làm đối số lệnh?


20

Đây có thể là một câu hỏi đơn giản, nhưng làm cách nào để sử dụng các tệp bắt đầu bằng "-" với các chương trình dòng lệnh?

Ví dụ, tôi đang cố gắng sử dụng pdfgreptrên một tệp có tên -2013-01-01.pdfnhưng nó phàn nàn rằng không có tùy chọn nào được xác định cho 2, 0, 1, 3, v.v.

Thay đổi tên tệp thành một cái gì đó không bắt đầu bằng "-" sẽ giải quyết nó, nhưng đây không phải là một tùy chọn vì các tệp không do tôi tạo ra. Tôi chỉ đơn giản muốn kiểm tra một sự thay đổi cụ thể mà tôi biết sẽ đến.


Liều này không hoạt động, cung cấp cho tôi các lỗi giống như trước đây
Kristoffer

3
Một ví dụ , grep -i dfv -- -myfile1 -myfile2.

mà làm việc cảm ơn! làm cho nó trả lời và tôi có thể đánh dấu nó là được chấp nhận cho các thế hệ tương lai :)
Kristoffer

@AliNa, việc sử dụng dấu ngoặc kép có hiệu quả với bạn với pdfgrep không? Nó không làm việc cho tôi. Tôi đang sử dụng Lubfox.

4
@AliNa: Dấu ngoặc kép sẽ không hoạt động, vì chúng được giải thích bởi shell chứ không phải chương trình.
hammar

Câu trả lời:


22

Rất thường xuyên --được sử dụng trên dòng lệnh để báo hiệu cho một chương trình không có thêm các công tắc lệnh khả dụng nào sẽ được sử dụng. Điều này đặc biệt hữu ích nếu một tệp chứa dấu gạch ngang, mà chương trình sẽ cố gắng diễn giải như một tùy chọn.

  1. Không có --, có một lỗi được tạo ra:

    $ 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. Với việc --sử dụng, chúng ta có một lệnh thành công:

    $ 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được lập trình để hiểu --có nghĩa là các đối số dòng lệnh sau không phải là tùy chọn. Hầu hết các chương trình đều làm như vậy, nhưng không phải tất cả các chương trình đều hiểu-- . Đối với các chương trình không có, giải pháp là thêm tên tệp bằng ./, như sau:

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

    Điều này sẽ làm việc với bất kỳ lệnh nào, trừ khi vì một số lý do, lệnh không thể chấp nhận một đường dẫn, chỉ một tên tệp thuần túy.

Để biết giới thiệu chung về dòng lệnh, hãy xem bản PDF hữu ích này .


4
Thật không may, --không phải làm việc với tất cả các chương trình dòng lệnh. Tôi đã giả định từ nhận xét đó của OP , pdfgrepmột trong số họ không nhận ra --. Nhưng sự chấp nhận ở đây cho thấy khác. Trong mọi trường hợp, một chương trình phải được mã hóa để nhận ra --. Nhiều chương trình sử dụng các thư viện để phân tích các đối số của họ, điều này nhận ra --. Nhưng một số thì không, và trong số đó, một số không được mã hóa để nhận ra --.
Eliah Kagan

3
Đối với những chương trình không nhận ra --cách giải quyết thông thường đang đặt ./trước tập tin:pdfgrep ./-2013-01-01.pdf
Carlos Campderrós

2
Vâng, đặt ./ở phía trước là giải pháp di động và mạnh mẽ nhất. Hoạt động trên mọi chương trình, trên mọi phiên bản unix.
hlovdal

16

Bạn thêm tên tệp bằng ./(hoặc đường dẫn tương đối hoặc tuyệt đối khác hoạt động). Cách này là di động.

Thí dụ:

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

Việc sử dụng --để chỉ ra sự kết thúc của các tùy chọn không phải lúc nào cũng có sẵn. Một số lệnh sẽ biết điều đó, một số sẽ không. Và điều này sẽ thay đổi trên các hệ thống khác nhau. Vì vậy, cuối cùng, nó ít di động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.