Bash: Как вывести стандартный вывод на консоль, а также передать следующую команду?

Вы должны отличать выход из оболочки от прерывания терминала.

  1. Оболочка уничтожает все известные задания (, но не их дочерние ), когда получает сигнал прерывания.
  2. Терминал уничтожает все, для чего он был управляющим терминалом.

В целом лучшим решением (на уровне пользователя )ИМХО является screen.

Если ваша задача больше связана с системой -, чем с пользователем -, вы можете вместо этого сделать ее службой systemd, которую вы запускаете вручную.

2
25.03.2020, 19:29
2 ответа

Используйте tee /dev/tty. Пример:

echo "Hello word" | tee /dev/tty | wc -c

teeи/dev/ttyтребуются POSIX.


В общем случае вы можете использовать имя вроде /dev/tty2или /dev/pts/7. Это не обязательно должен быть текущий терминал, если только вы можете писать на него.

Another way to look at it is, how can I stdout to console within each pipe segment. That should help to debug a long chain of commands, before committing it to a bash script.

Я проделал нечто подобное с панелями tmux. Вы можете сделать это с tmuxили без него.

  1. Подготовьте столько панелей, сколько вам нужно; или консольные окна, если хотите.
  2. При каждом вызове ttyузнать имя файла терминала.
  3. В одном из них вызовите конвейер, который вы хотите отладить, используя teeи разные терминалы на каждом этапе. Этот трубопровод

    command1 | command2 | command3
    

    станет чем-то вроде

    command1 | tee /dev/pts/4 | command2 | tee /dev/pts/5 | command3
    

    , где /dev/pts/4и /dev/pts/5— дополнительные клеммы (, например. панели вtmux).

2
28.04.2021, 23:19

... | tee log-file-name

Это берет стандартный вывод первой команды и копирует его в файл журнала и на стандартный вывод.

0
28.04.2021, 23:19

Теги

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