Я хочу создать псевдоним bash для grep, который добавляет номера строк:
alias grep='grep -n'
Но это, конечно, добавляет номера строк в конвейеры. Большую часть времени (и на ум не приходит никаких исключений) я не хочу, чтобы номера строк в конвейере (по крайней мере, внутренне, вероятно, были бы в порядке, если он последний), и я действительно не хочу добавлять sed / awk / cut в трубопровод только чтобы вынуть их.
Возможно, мои требования можно было бы упростить так: «добавляйте только номера строк, если grep - единственная команда в строке». Есть ли способ сделать это без особо уродливого псевдонима?
источник
[[ -t 0 && -t 1 ]]
если вам нужны только номера строк, если и стандартный вход, и стандартный выход подключены к терминалу.(для полноты)
Хотя ответ @ enzotib, скорее всего, то, что вы хотите, это не то, что вы просили.
[ -t 1 ]
проверяет, является ли файловый дескриптор оконечным устройством, а не что-либо, кроме канала (например, обычный файл, сокет, устройство другого типа, например/dev/null
...)Команда
[
не имеет эквивалента,-t
кроме как для труб. Чтобы получить тип файла, связанный с дескриптором файла, вам необходимо выполнитьfstat()
системный вызов для него. Для этого нет стандартной команды, но некоторые системы или оболочки имеют некоторые.С GNU
stat
:Или с
zsh
и своим собственнымstat
встроенным (который предшествует GNU один на несколько лет), здесь загружается какzstat
только:Теперь несколько заметок:
Это не только оболочки трубопроводов, которые используют трубы.
или:
или:
также бежать
grep
со своим stdout, идущим к трубе.Если ваша оболочка есть
ksh93
, обратите внимание, что в некоторых системах она использует пары сокетов вместо каналов в своих конвейерах.источник