Як я можу використовувати назви файлів, які починаються з тире "-", як аргументи команд?


20

Це може бути простим питанням, але як я можу використовувати файли, починаючи з "-" програм командного рядка?

Наприклад, я намагаюся використовувати pdfgrepфайл з назвою, -2013-01-01.pdfале він скаржиться, що немає параметрів, визначених для 2, 0, 1, 3 і так далі.

Зміна імені файлу на те, що не починається з "-" вирішує його, але це не варіант, оскільки файли не створені мною. Я просто хочу перевірити, чи не відбулася конкретна зміна, яку я знаю.


це не працює, дає мені ті самі помилки, що і раніше
Крістофер

3
В якості прикладу, grep -i dfv -- -myfile1 -myfile2.

що працює! Спасибі! зробіть це n відповіді, і я можу позначити це як прийняте для наступних поколінь :)
Kristoffer

@AliNa, чи спрацьовувало використання котирувань для вас саме з pdfgrep? Це не працювало для мене. Я використовую Lubuntu.

4
@AliNa: Лапки не працюватимуть, оскільки вони інтерпретуються оболонкою, а не програмою.
хаммар

Відповіді:


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один із них не визнає --. Але прийняття тут говорить про інше. У будь-якому випадку, програма повинна бути закодована для розпізнавання --. Багато програм використовують бібліотеки для розбору своїх аргументів, які розпізнають --. Але деякі ні, а тих, кого не кодують, визнають --.
Елія Каган

3
Для тих програм, які не розпізнають --звичне вирішення, ставлять ./перед файлом:pdfgrep ./-2013-01-01.pdf
Carlos Campderrós

2
Так, висунення ./попереду - це найбільш портативне та надійне рішення. Працює в будь-якій програмі, на будь-якій версії Unix.
hlovdal

16

Ви додаєте до файлу ім'я ./(або інший відносний або абсолютний шлях, який працює). Таким чином він портативний.

Приклад:

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

Використання --для позначення кінця варіантів не завжди доступне. Деякі команди знають це, деякі - не. І це зміниться в різних системах. Отже, зрештою, він менш портативний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.