stdin или имена файлов должны быть отброшены, если обоим предоставляют?

Альтернатива, больше как любопытство. Если GNU awk включен, date не нужно:

awk 'BEGIN{print strftime("%Y")"q"int((strftime("%-m")-1)/3)+1}'
3
29.12.2012, 12:01
2 ответа

Программа знает, указаны ли файлы на ее командной строке. Это не может знать, существует ли какой-либо вход, доступный на stdin (кроме путем попытки считать его), и если там вводится, нет никакого пути к программе, чтобы знать, был ли тот вход предназначен для него. Таким образом, единственная разумная опция состоит в том, чтобы иметь четкое правило, на основе того, как программа была вызвана (параметры командной строки, переменные среды, конфигурационные файлы, …), чтобы решить, будет ли это читать из stdin или нет.

Например, типичные текстовые утилиты (cat, sort, grep, awk, perl -p, …) чтение от stdin, если никакой файл не обеспечивается и читается из указанного файла (файлов), если существует кто-либо. Интерпретаторы повинуются подобной конвенции, например sh без аргументов читает команды из стандартного входа в то время как sh script_file_name чтения управляют из указанного файла (и листы stdin, чтобы быть считанным сценарием, если он хочет). Существует также общая конвенция это если - появляется в положении, где название входного файла ожидается, программа будет читать из stdin.

Рассмотрите отрывок оболочки как

somecommand | while read line; do
  process "$line"
done

Необходимо знать ли process чтения от stdin или нет. Нет такой вещи как “тестирование, обеспечивается ли stdin”: это там, но пользователь, который вызывает программу, знает, хочет ли он, чтобы stdin был считан или нет.

1
27.01.2020, 21:29

Ответ, который я нашел, это - то, как он разработан. Если Вы хотите читать и из stdin и из использования файла echo foobar | grep f - test.txt. от man grep

 grep  searches the named input FILEs (or standard input if no files are
 named, or if a single hyphen-minus (-) is given as file name) for lines
 containing  a  match to the given PATTERN.  By default, grep prints the
 matching lines.
1
27.01.2020, 21:29

Теги

Похожие вопросы