Вы должны отличать выход из оболочки от прерывания терминала.
В целом лучшим решением (на уровне пользователя )ИМХО является screen
.
Если ваша задача больше связана с системой -, чем с пользователем -, вы можете вместо этого сделать ее службой systemd, которую вы запускаете вручную.
Используйте tee /dev/tty
. Пример:
echo "Hello word" | tee /dev/tty | wc -c
В общем случае вы можете использовать имя вроде /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
или без него.
tty
узнать имя файла терминала. В одном из них вызовите конвейер, который вы хотите отладить, используя tee
и разные терминалы на каждом этапе. Этот трубопровод
command1 | command2 | command3
станет чем-то вроде
command1 | tee /dev/pts/4 | command2 | tee /dev/pts/5 | command3
, где /dev/pts/4
и /dev/pts/5
— дополнительные клеммы (, например. панели вtmux
).
... | tee log-file-name
Это берет стандартный вывод первой команды и копирует его в файл журнала и на стандартный вывод.