Передача данных в программу Linux, которая ожидает TTY (терминал)

У меня есть программа в Linux, которая отказывается запускаться, если ее стандартный ввод / вывод не является TTY (терминальное устройство). Существует ли простой в использовании инструмент, который создаст PTY, запустит программу с вновь созданным TTY и скопирует все данные через stdin/stdout?

Вариант использования не интерактивный, а сценарий. Я ищу наиболее легкое решение, предпочтительно не создающее TCP-соединения и не требующее установки слишком большого количества других инструментов и библиотек.

2 ответа

Решение

unbufferчасть ожидаемая (sudo apt-get install expect-dev в Ubuntu Lucid) может заставить программу думать, что она подключена к TTY.

$ tty 
/dev/pts/3
$ echo | tty 
not a tty
$ echo | unbuffer tty 
/dev/pts/11

Вы можете использовать socat для этого: echo your stdin strings | socat EXEC:"your_program",pty STDIO >/stdout_file

Например с bash: echo ls | socat EXEC:'bash',pty STDIO >/tmp/ls_out

Или, как описано здесь , для программы, запускаемой с docker:

      # Run the docker task, here bash, in background
docker run -it --rm --name test ubuntu &
# Send "ls -la" to the bash running inside docker
echo 'ls -la' | socat EXEC:'docker attach test',pty STDIN
# Show the result
docker logs test
Другие вопросы по тегам