我正在尝试通过stdin将箭头键发送到bash:
猫| /斌/庆典
然后我输入“echo hi”=> “hi”出现在控制台上(当然没有引号) 然后我按向上箭头键=> ^ [[找不到命令
是否可以通过stdin向程序发送箭头键?
我要问的原因是:我想从另一个程序控制bash。我想将箭头键发送到bash
答案 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)