Как я могу сделать что-то для каждой строки файла, используя цикл bash?

Опираясь на то, что Жиль сказал , если мы хотим записать в стандартный ввод процесса, который подключен к терминалу, нам фактически нужно отправить информацию на терминал. Однако, поскольку терминал служит формой ввода, а также вывода, при записи в него терминал не может знать, что вы хотите писать в процесс, работающий внутри него, а не на «экран».

Однако в 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]))

Некоторые внешние ресурсы:

http://man7.org/linux/man-pages/man2/ioctl.2.html

http://man7.org/linux/man-pages/man2/ioctl_tty.2.html

0
17.11.2021, 01:37
1 ответ

Похоже, ваше дополнение работает так, как вы хотите:

#!/bin/sh
while read line; do
    echo "$line"
done < tt

Выход:

#define a b
#define c d
0
17.11.2021, 04:00

Теги

Похожие вопросы