Псевдотерминалы (PTY) - это то, что позволяет запускать оболочки, эмулировать сессии и автоматизировать взаимодействие с CLI-программами, которые ждут ввода. В linux есть несколько инструментов, которые можно использовать для работы с ними.
▪️ script - захват сессии в PTY
script -q -c "top -n 1" session.log
Команда выполнится в псевдотерминале, а весь вывод будет сохранен, как будто это была обычная интерактивная сессия.
Полезно: для логгирования; обхода нестандартного поведения программ без TTY.
▪️ socat - соединение PTY с чем угодно. Создание виртуальной пары PTY-устройств:
socat -d -d pty,raw,echo=0 pty,raw,echo=0
Это выведет два устройства
/dev/pts/X и /dev/pts/Y, которые можно использовать, например, чтобы связать скрипт и программу, как будто они "болтают" друг с другом.Применения: имитация COM-портов; отладка CLI-программ; организация проброса ввода/вывода.
▪️ expect - автоматизация интерактивных CLI
#!/usr/bin/expect -f
spawn ssh user@host
expect "password:"
send "supersecret\r"
interact
expect ждет определенный вывод и отправляет нужный ввод. Это незаменимо, когда скрипт должен работать с программой, которая не поддерживает аргументы, только ручной ввод.
❓ Когда это нужно?
📍 автоматизация SCP, FTP, SSH при отсутствии ключей;
📍 создание тестов CLI-интерфейсов;
📍 запуск GUI-оберток над TUI-программами;
📍 обход "упрямых" команд, требующих TTY (sudo, passwd, mysql, и др.);
BashTex 📱 #bash #utils