Я могу высказать Вам хорошее предположение... это - вероятно, функция поиска в GNOME. Большинство средств поиска с открытым исходным кодом должно контролировать файлы для действия. В Linux это очень эффективно, но в BSD нет никакого inotify. Они используют kqueue, который является большим за исключением того, что он израсходовал все Ваши дескрипторы файлов. Можно увеличить предел или поворот функций поиска/контроля. Существуют несколько, и это можно было бы назвать гончей.
Если Вы знаете, что никогда не собираетесь использовать grep
для чтения из терминала Вы могли переопределить grep как:
grep() {
if [ -t 0 ]; then
< /dev/null command grep "$@"
else
command grep "$@"
fi
}
Это не даст Вам предупреждения о Вас опечатка. Но по крайней мере это сразу возвратится без соответствия. Это будет также влиять на поведение когда -
или /dev/stdin
передается как аргумент grep
.
Править:
На самом деле способ получить предупреждение состоял бы в том, чтобы закрыть stdin вместо того, чтобы перенаправить его от /dev/null
:
grep() {
if [ -t 0 ]; then
<&- command grep "$@"
else
command grep "$@"
fi
}
$ grep foobar.txt
grep: (standard input): Bad file descriptor
Нет, потому что оболочка не имеет никакого способа знать, блокируется ли программа на входе. Даже если это было, это не может знать, прибудет ли введенный в конечном счете (см. проблему остановки). Что, если это ожидает вход от терминала? Вы могли ожидать минуты, дни, десятилетия для предоставления входа, которого это ожидает. less
оказывается, блокирует вход от получения до grep
, но это не всегда имеет место, например, попытка cat | grep foo
- это обработает то, что Вы вводите на командной строке (Ctrl+D для окончания).
lsof
кажется, что нет никакого общего пути. Однако оболочки как zsh
знайте параметры командной строки для grep
и таким образом мог обнаружить, если аргумент файла отсутствует.
– Michael Kuhn
05.02.2013, 17:28
zsh
функция завершения для grep
знает аргументы, которые это ожидает, но я сомневаюсь, что это встроено в оболочку по сути. Так или иначе, как это знало бы, намереваетесь ли Вы вводить/копировать текст к stdin сами?
– Kevin
05.02.2013, 17:43