В чем волшебство "-" (тире) в параметрах командной строки? - PullRequest
83 голосов
/ 08 ноября 2011

Примеры:

  • Создайте образ ISO и запишите его непосредственно на CD.

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • Перейти к предыдущему каталогу.

    cd -

  • Прослушивание порта 12345 и отправка на него данных Untar.

    nc -l -p 12345 | tar xvzf -

Какова цель тире и как мне ее использовать?

Ответы [ 6 ]

91 голосов
/ 08 ноября 2011

Если вы подразумеваете «голый» - в конце команды tar, это часто встречается во многих командах, которые хотят использовать файл.

Это позволяет вам указать стандартный ввод или вывод вместо фактическое имя файла.

Это относится к вашему первому и третьему примеру.Например, команда cdrecord принимает стандартный ввод (поток изображения ISO, создаваемый mkisofs) и записывает его непосредственно в /dev/dvdrw.

С помощью команды cd каждый раз, когда вы меняете каталог, он сохраняет каталог, из которого вы пришли.Если вы делаете cd со специальным - «именем каталога», он использует этот запомненный каталог вместо реального.Вы можете легко переключаться между двумя каталогами, используя это.

Другие команды могут трактовать - как другое специальное значение.

15 голосов
/ 08 ноября 2011

Это не волшебство.Некоторые команды интерпретируют - как пользователя, желающего читать из stdin или писать в stdout;в оболочке нет ничего особенного.

11 голосов
/ 08 ноября 2011

Перенаправление с или на stdin или stdout.

См .: http://tldp.org/LDP/abs/html/special-chars.html#DASHREF2

6 голосов
/ 08 ноября 2011

- означает именно то, что каждая команда хочет, чтобы это значило. Существует несколько общих соглашений, и вы видели примеры большинства из них в других ответах, но ни одно из них не является на 100% универсальным.

В характере - нет ничего волшебного в том, что касается оболочки (за исключением того, что сама оболочка и некоторые ее встроенные команды, такие как cd и echo, используют ее обычными способами) , Некоторые символы, такие как \, ' и ", , являются «магическими» и имеют особые значения, где бы они ни появлялись. Это "метасимволы оболочки". - не такой.

Чтобы увидеть, как данная команда использует -, прочитайте документацию по этой команде .

6 голосов
/ 08 ноября 2011

Магия в соглашении.В течение тысячелетий люди использовали «-», чтобы отличать параметры от аргументов, и использовали «-» в имени файла для обозначения либо stdin, либо stdout, в зависимости от ситуации.Не стоит недооценивать силу конвенции!

4 голосов
/ 08 ноября 2011

Это означает использование стандартного входного потока программы.

В случае cd это означает что-то другое - перейдите в предыдущий рабочий каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...