Да. Несколько.
Как упоминалось в другом ответе, семейство библиотечных функций exec*p()
использует наличие в имени символа косой черты в качестве проверки того, следует ли выполнять поиск пути.
Программы, конечно, могут выполнять свой собственный поиск пути вне библиотеки C. Они могут искать что-то еще, кроме как выполнить их. Или они могут захотеть немного другого поведения, чем библиотечные функции C, у которых есть несколько -известных сюрпризов для тех, кто не знает, что предписывает стандарт POSIX. Поэтому они реализуют свой собственный поисковый код. Обычно они следуют соглашениям библиотеки C, и если имя содержит символ косой черты, они просто используют имя как -.
Оболочки с механизмами CDPATH
или cdpath
выполняют такой поиск и имеют такое поведение. Вот оболочка TENEX C:
~> set cdpath=(/usr /) ~> cd./etc ./etc: No such file or directory. ~> cd etc /etc /etc>
Один из способов убедиться, что имя файла, начинающееся со знака минус, не воспринимается как опция командной строки -, состоит в добавлении к нему префикса ./
. Например:
rm./-rf
— имя файла, а rm -rf
— параметр командной строки -. find./-name wibble
сканирует два дерева каталогов и находит все; тогда как find -name wibble
сканирует одно дерево каталогов и применяет сопоставление с образцом. Иногда синтаксис команды определяется таким образом, что что-то вообще является только именем файла, если оно начинается с точки. В противном случае это что-то другое. В некотором смысле, это обобщение знака минус как условного обозначения опциональных символов.
Дляmultilog
Дэна Бернстайна из daemontools,multilog
Брюса Гюнтера из daemontools -encore, djbwaresmultilog
иs6-log
Лорана Берко из s6, аргументы строки команды -представляют собой сценарий регистрации , где первая буква каждого аргумента указывает, что это за команда сценария. Чтобы обозначить каталог журнала, нужно указать аргумент командной строки, начинающийся с косой черты или символа точки. multilog./t./u
означает запись в два каталога; тогда как multilog t./u
означает запись в один каталог и добавление временных меток.
Чтобы прочитать из stdin
, вы можете использовать
less -
Однако это больше подходит для случаев, когда вы хотите направить вывод другой команды в less
. Ввод с клавиатуры также будет работать, но вы будете печатать вслепую и вам придется нажимать Ctrl-C
, чтобы вернуть управление меньшему, что делает такое использование довольно трудным (, если не бессмысленным ). Также обратите внимание, что это недокументировано и может вообще не быть переносимым!
Может быть, вы хотите уточнить, почему вы хотите, чтобы less
читал из stdin
?
Если вы пытаетесь отправить команды на less
, вы можете сделать это, используя +
в командной строке, например:
less +G somefile
ls -l | less +G
Это эквивалентно открытию less
и вводу команды G
в приглашении по умолчанию.
Если вы говорите о less
информации о подкачке, которую вы ввели, вы можете использовать heredoc, но я не уверен, как это использовать:
less << EOF
hello
world
EOF