Опираясь на то, что Жиль сказал , если мы хотим записать в стандартный ввод процесса, который подключен к терминалу, нам фактически нужно отправить информацию на терминал. Однако, поскольку терминал служит формой ввода, а также вывода, при записи в него терминал не может знать, что вы хотите писать в процесс, работающий внутри него, а не на «экран».
Однако в Linux есть не -posix способ имитации пользовательского ввода с помощью запроса ioctl, который называетсяTIOCSTI
(Terminal I/O Control -Simulate Terminal Input ), который позволяет нам отправлять символы на терминал, как если бы они были введены пользователем.
Я лишь поверхностно знаю, как это работает, но, основываясь на этом ответе, должно быть возможно сделать это с помощью чего-то вроде
import fcntl, sys, termios
tty_path = sys.argv[1]
with open(tty_path, 'wb') as tty_fd:
for line in sys.stdin.buffer:
for byte in line:
fcntl.ioctl(tty_fd, termios.TIOCSTI, bytes([byte]))
Некоторые внешние ресурсы:
Похоже, ваше дополнение работает так, как вы хотите:
#!/bin/sh
while read line; do
echo "$line"
done < tt
Выход:
#define a b
#define c d