Это кажется read
не пишет в стандартный вывод.
$ cat test.sh #!/bin/bash read -p "type a key and Enter" key echo "the key was $key" $ ./test.sh type a key and Enterx the key was x $ ./test.sh | tee file type a key and Enterx the key was x $ cat file the key was x
Попытка его без сценария...
$ read -p "type a key and Enter" key | tee file type a key and Enterx $ cat file $
read
команда описана здесь. Краткое описание: "Считайте строку из стандартного входа".
Информация о канале, |
, из Командной строки Linux (2-й интернет-Выпуск) William E. Shotts следует.
Используя оператор канала "|" (вертикальная панель), стандартный вывод одной команды может быть передан по каналу к в стандартный вход другого:
command1 | command2
Из страницы справочника для tee
это описание:
читайте из стандартного входа и запишите в стандартный вывод и файлы
Страница справочника для tee
в этой ссылке.
Где список всех других примеров программ, которые пишут в консоль, но на самом деле не используют стандартный вывод, или в отсутствие такого списка, каково общее правило для знания, когда программа, которая пишет в консоль, не использует стандартный вывод?
Это кажется read
нарушает Принцип Наименьшего количества Удивления.
В Вашем примере, read
пишет в stderr вместо stdout. Вот то, как я знаю:
$ read -p "Type a key and press Enter: " key >/dev/null Type a key and press Enter: x $ read -p "Type a key and press Enter: " key 2>/dev/null x
можно сделать этот тест на любой программе, чья производит Вас, хотят перенаправить.
, Таким образом, команда, которую Вы ищете, является этим:
$ read -p "Type a key and press Enter: " key 2>&1 | tee file Type a key and press Enter: x $ cat file Type a key and press Enter: $
Для объяснений вышеупомянутых перенаправлений:
С какой сказанный wjandrea, который корректен, который можно захватить stderr
то чтение делает. К сожалению, пытаясь читать в с stderr
не сохраняет переменную key
, так вывод для echo $key
закончится пробел. Однако в сценарии это сохранит переменную, потому что сама строка чтения не перенаправляется от stderr
кому: stdout
2>&1
в сценарии. Вместо этого сценарий добирается для хранения переменной, потому что это теперь установлено, прежде чем это доберется до перенаправления. Я думаю, чтобы помочь, использовать echo
строки вместо этого. Я добавил все примеры.
Пример Вашего сценария:
:~$ cat test1.sh
#!/bin/bash
read -p "type a key and Enter: " key
echo "the key was $key"
:~$ ./test1.sh | tee junk
type a key and Enter: G
the key was G
:~$ cat junk
the key was G
С 2>&1
перенаправление:
:~$ ./test1.sh 2>&1 | tee junk
type a key and Enter: G
the key was G
:~$ cat junk
type a key and Enter: the key was G
С echo
строка:
:~$ cat test.sh
#!/bin/bash
echo -n "Type a key and press Enter: "
read key
echo "the key was $key"
echo
строка с командой мишени:
:~$ ./test.sh | tee junk
Type a key and press Enter: X
the key was X
:~$ cat junk
Type a key and press Enter: the key was X
Пример никакого сценария:
С stderr
:
:~$ read -p "Type a key and press Enter: " key 2>&1 |tee junk; echo "The key was $key" | tee -a junk
Type a key and press Enter: F
The key was
:~$ cat junk
Type a key and press Enter: The key was
С echo
и несколько команд мишени вместо этого:
:~$ echo -n "Type a key and press Enter: " | tee junk; read key; echo "The key was $key" | tee -a junk
Type a key and press Enter: F
The key was F
:~$ cat junk
Type a key and press Enter: The key was F
Надеюсь, это поможет!