Я пытаюсь перенаправить весь вывод из bash (приглашение, ввод пользователя, результаты) в файл
Пример:
/bin/bash > file.txt 2>&1
Я думал, что это сработает, но я не получаю подсказку. Может кто-нибудь сказать мне, что я делаю не так?
источник
Я пытаюсь перенаправить весь вывод из bash (приглашение, ввод пользователя, результаты) в файл
Пример:
/bin/bash > file.txt 2>&1
Я думал, что это сработает, но я не получаю подсказку. Может кто-нибудь сказать мне, что я делаю не так?
Bash выводит подсказку только в интерактивном режиме. Т.е. это нормально выводится на терминал (/ dev / tty на linux). Это не / dev / stdout или / dev / stdin :)
Теперь я не уверен, но могу представить, что bash разрешит ограниченный интерактивный режим, когда нет полностью функционального tty. В этом случае я ожидаю, что приглашение будет записано на стандартный вывод. Я не проверял это.
Хорошее доказательство концепции:
(for a in some set of words; do echo $a > /dev/tty; done) 2>&1 > /dev/null
будет просто выводить 1..10, как если бы не было перенаправления. Как и подсказка, вывод напрямую отправляется на терминал (который не будет выполнен, если его нет)
СОВЕТ: если вы хотите, чтобы все было собрано, посмотрите на
set -o xtrace
(иначе set -x
, и bash -x
т. д.) для общего ведения отчетов
seq
является крайне нестандартной внешней командой, и ее не следует использовать таким образом. Если вы используетеbash
, сделайте что-то вродеfor x in {1..10}
илиfor ((x=1; x<=10; x++))
вместо.Чтобы обмануть себя,
bash
думая, что это в интерактивном режиме (хотяstdout
и не отправляется на терминал), вы можете использовать уже упомянутуюscript
команду.источник
Самый простой способ сделать это
Bash будет записывать все
/tmp/logfile
и продолжать выполнять команды по мере их ввода, но в терминале ничего не будет отображаться. Вы можете заставить его выйти так же, как вы выходите из сеанса терминала - нажав Ctrl+ Dили набравexit
.Обратите внимание, что если вы выполните то же самое без
stderr
перенаправления, в файл будет записано только приветственное сообщение, а все остальное будет работать в вашем текущем терминале. Таким образом, ответ на ваш вопрос о потоке, на который bash выводит свою подсказку (и все следующие команды), выглядит следующим образом: stderr .О да, и
-i
параметр просто заставляет bash работать в интерактивном режиме. Не слушайте этих людей - вам не нужны никакие фокусы;)источник
<sub>
для форматирования. Я только что узнал что-то новое сегодня. : DПодсказка пишется в stderr как ферма (здесь на Solaris):
источник