Программа не может различить EOF, означающий "пора заканчивать", и EOF, означающий "запись завершена, но может быть больше информации от кого-то другого". ".
Если у вас есть возможность изменить поведение вашей программы, то сделайте чтение в бесконечном цикле (одна итерация длится до EOF) и отправьте ей определенную командную строку, которая означает «время выхода». Отправка этой строки будет задачей команды send_eof
в вашем вопросе.
Другой вариант:
( echo some stuff; cat more_stuff.txt ) >P
или
{ echo some stuff; cat more_stuff.txt; } >P
Если вы действительно захотите, вы можете создать программу (или сценарий оболочки), которая вызывает скрипт
, записывающий в файл "машинописного текста" с меткой времени (и, в свою очередь, вызывающий вашу настоящую оболочку) и делает , что программирует вашу оболочку по умолчанию в / etc / passwd
.
Есть несколько подводных камней:
/ etc / shells
SHELL
, которая используется по-разному. . Переопределите это, чтобы избежать зацикливания (и другого неправильного поведения): #!/bin/sh SHELL=/bin/bash export SHELL script -c "$SHELL" $HOME/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt
Если ваша цель - контролировать систему, вам понадобится pam_tty_audit
. Как следует из названия, pam_tty_audit
- это модуль pam , который при правильной настройке вызывается каждый раз, когда пользователь открывает сеанс (и получает TTY). Модуль записывает весь ввод и вывод и отправляет все, что записывает, демону auditd . Затем вы можете выполнить запросы к демону auditd для просмотра журналов.
RedHat предоставляет прекрасное руководство по началу работы с pam_tty_audit
: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sec_Configuring_PAM .html
Для дистрибутивов, не основанных на RedHat или Fedora, руководство по-прежнему работает, но может потребоваться небольшая настройка имен файлов в /etc/pam.d/
.
Обратите внимание, что это не полностью надежно. Есть способы выполнять команды без TTY.Например, при подключении через ssh вы можете выполнить ssh foo.example.com bash -i
, и поскольку была указана команда, TTY не выделяется. Хотя есть кое-что, что вы можете сделать, чтобы этого избежать.
Вы также хотите убедиться, что доступ к журналу защищен. pam_tty_audit
записи ВСЕ TTY действия, включая пароли, которые вы вводите.