Это может быть простой вопрос, но как мне использовать файлы, начинающиеся с "-", с программами командной строки?
Например, я пытаюсь использовать pdfgrep
файл с именем, -2013-01-01.pdf
но он жалуется, что нет опций, определенных для 2, 0, 1, 3 и так далее.
Изменение имени файла на что-то, что не начинается с «-», решает это, но это не вариант, так как файлы не созданы мной. Я просто хочу проверить, есть ли конкретные изменения, которые, я знаю, произойдут.
command-line
special-characters
filename
Кристоффер
источник
источник
grep -i dfv -- -myfile1 -myfile2
.Ответы:
Очень часто
--
используется в командной строке, чтобы сигнализировать программе о том, что больше не будут использоваться доступные переключатели команд. Это особенно полезно, если файл содержит тире, который программа попытается интерпретировать как опцию.Без этого
--
генерируется ошибка:С помощью
--
мы имеем успешную команду:pdfgrep
запрограммирован, чтобы понимать,--
что следующие аргументы командной строки не являются опциями. Большинство программ делают то же самое, но не все программы понимают--
. Для программ, которые этого не делают, решение заключается в добавлении имени файла./
следующим образом:Это должно работать с любой командой, если только по какой-то причине команда не может принять путь, только чистое имя файла.
Для общего ознакомления с командной строкой, смотрите этот полезный PDF .
источник
--
это не работает с всеми программами командной строки. Из этого комментария ОП я предположил , чтоpdfgrep
это один из тех, кто не признает--
. Но принятие здесь предполагает иное. В любом случае, программа должна быть закодирована для распознавания--
. Многие программы используют библиотеки для анализа своих аргументов, которые распознают--
. Но некоторые этого не делают, и некоторые из них не закодированы для распознавания--
.--
обычный обходной путь, ставят./
перед файлом:pdfgrep ./-2013-01-01.pdf
./
впереди - самое портативное и надежное решение. Работает на любой программе, на любой версии Unix.Вы добавляете имя файла с помощью
./
(или другого относительного или абсолютного пути, который работает). Таким образом, это портативно.Пример:
Использование
--
для обозначения конца опций не всегда доступно. Некоторые команды будут знать это, некоторые - нет. И это изменится в разных системах. Так что, в конце концов, он менее портативный.источник