Каково точно использование '-' в ударе? Я знаю, что они могут использоваться для
cd -
# взять Вас к старому 'существующему рабочему каталогу'some stream generating command | vim -
# так или иначе энергия получает текст.Мой вопрос - то, что точно - в ударе? В каком другие контексты я могу использовать его?
Отношения Arun
-
в bash не имеет никакого значения как отдельный аргумент (я бы не стал говорить, что он вообще не имеет значения в shell - он, например, используется в расширении, например, ls [0-9]*
перечисляет все файлы, начинающиеся с цифры).
Что касается самостоятельного значения параметра, то bash не будет делать с ним ничего особенного и передаст команде как есть.
Что команда делает с ним, зависит от каждой отдельной программы - это может быть практически все, что угодно.
Существует общепринятое соглашение, что аргумент -
указывает программе, что входные данные должны быть прочитаны из STDIN, а не из файла. Опять же, это просто способ кодирования многих программ и технически не имеет никакого отношения к bash.
From tldp:
Это можно сделать, например, используя дефис (-), чтобы указать, что программа должна читать из трубы
Это объясняет, как ваш пример vim получает свои данные.
Это зависит от приложения.
cd -
возвращает в последний каталог, в котором вы были.
Часто -
означает stdin
или stdout
. Например:
xmllint -
не проверяет файл XML, но проверяет XML на stdin
. Пример:
xmllint - <<EOF
<root/>
EOF
То же самое верно для cat
:
cat -
читает из stdin
. Последний пример, где -
означает stdout
:
wget -O- http://google.com
получит google.com по HTTP и отправит его на stdout
.
Кстати: это не имеет ничего общего с вашей оболочкой (например, bash
). Это всего лишь семантика вызываемого приложения.
Здесь нет универсального правила.
В зависимости от контекста оно меняется
Это довольно полезно, когда вам нужно что-то сделать несколько раз в двух директориях. См. #4 здесь: http://www.thegeekstuff.com/2008/10/6-awesome-linux-cd-command-hacks-productivity-tip3-for-geeks/
Во многих местах это означает STDIN.