клавиша со стрелкой через стандартный ввод - PullRequest
3 голосов
/ 27 ноября 2009

Я пытаюсь послать клавишу со стрелкой через стандартный ввод в bash:

кошка | / Бен / Баш

тогда я набираю «echo hi» => «hi» появляется на консоли (конечно, без кавычек) затем я нажимаю клавишу со стрелкой вверх => ^ [[Команда не найдена появляется

Можно ли отправить клавишу со стрелкой в ​​программу через стандартный ввод?

Причина, по которой я спрашиваю: я хочу управлять bash из другой программы. Я хотел бы отправить клавиши со стрелками на Bash

Ответы [ 3 ]

5 голосов
/ 12 декабря 2009

Что вам действительно нужно сделать, так это создать псевдо-tty устройство (используя openpty() или подобное), запустить bash для этого PTY и отправить нажатия клавиш через это устройство PTY. См. раздел «Псевдо-терминалы» в Руководстве по библиотеке GNU C.

0 голосов
/ 22 февраля 2013

Не используйте cat. Используйте встроенную команду Bash read с параметром -e, чтобы включить поддержку readline.

# version 1
while IFS="" read -r -e -d $'\n' line; do printf '%s\n' "$line"; done | /bin/bash

# version 2
#set -o pipefail
# kill 0: kill process group
(
while IFS="" read -r -e -d $'\n' line; do 
   #trap 'trap - EXIT HUP INT QUIT PIPE TERM ERR; kill $PPID' EXIT HUP INT QUIT PIPE TERM ERR 
   trap 'trap - EXIT HUP INT QUIT PIPE TERM ERR; kill 0' EXIT HUP INT QUIT PIPE TERM ERR 
   printf '%s\n' "$line" >> ~/.bash_history
   history -n
   printf '%s\n' "$line" 
done 
) | (trap 'trap - EXIT HUP INT QUIT PIPE TERM ERR; kill 0' EXIT HUP INT QUIT PIPE TERM ERR; /bin/bash)
#) | (trap 'trap - EXIT HUP INT QUIT PIPE TERM ERR; kill $PPID' EXIT HUP INT QUIT PIPE TERM ERR; /bin/bash)
0 голосов
/ 27 ноября 2009

Попробуйте запустить bash с помощью переключателя -i.

...