箭头键通过标准输入

时间:2009-11-26 21:53:13

标签: bash stdin tty pty

我正在尝试通过stdin将箭头键发送到bash:

猫| /斌/庆典

然后我输入“echo hi”=> “hi”出现在控制台上(当然没有引号) 然后我按向上箭头键=> ^ [[找不到命令

是否可以通过stdin向程序发送箭头键?

我要问的原因是:我想从另一个程序控制bash。我想将箭头键发送到bash

3 个答案:

答案 0 :(得分:5)

你真正应该做的是创建一个伪tty设备(使用openpty()或类似),在该PTY上启动bash,并通过该PTY设备发送你的击键。请参阅GNU C Library Manual中的the section on “Pseudo-Terminals”

答案 1 :(得分:0)

尝试使用-i开关启动bash。

答案 2 :(得分:0)

请勿使用cat。使用带有read选项的Bash内置-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)