Это может быть простой вопрос, но как мне использовать файлы, начинающиеся с «-», с программами командной строки?
Например, я пытаюсь использовать pdfgrep
для файла с именем -2013-01-01.pdf
, но он жалуется, что нет опций, определенных для 2, 0, 1, 3 и т. Д.
Изменение имени файла на что-то, что не начинается с «-», решает его, но это не вариант, так как файлы не созданы мной. Я просто хочу проверить, есть ли конкретные изменения, которые, как я знаю, произойдут.
Очень часто --
используется на командной строке, чтобы предупредить программу, что никакие более доступные командные коммутаторы не будут используемыми. Это особенно полезно, если бы файл содержит тире, которого программа попыталась бы интерпретировать как опция.
Без --
, существует сгенерированная ошибка:
$ 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'
С --
используемый у нас есть успешная команда:
$ 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.
pdfgrep
программируется для понимания --
означать, что следующие параметры командной строки не являются опциями. Большинство программ делает то же, но не все программы понимают --
. Для программ, которые не делают, решение состоит в том, чтобы предварительно ожидать имя файла с ./
, как это:
pdfgrep -i posix ./-find.pdf ./-xorg.pdf
Это должно работать с любой командой, если по некоторым причинам команда не может принять путь, только чистое имя файла.
Для общего введения в командную строку посмотрите этот полезный PDF.
Вы добавляете имя файла с ./
(или другим подходящим относительным или абсолютным путем). Таким образом, это портативно.
Пример:
for zefile in ./*.tmp
do
rm -f "$zefile"
done
Использование --
для указания конца опций не всегда доступно. Некоторые команды будут знать это, некоторые - нет. И это изменится в разных системах. Так что, в конце концов, он менее портативный.