如何通过echo向另一终端发送可被程序识别的回车确认输入?
如何向目标终端发送带回车确认的输入让C++程序读取?
问题场景
我在终端/dev/pts/1执行以下命令,试图向终端/dev/pts/0发送输入:
echo "some_input" | write /dev/pts/0 # 或者 echo "some_input" > /dev/pts/0
目标终端/dev/pts/0中运行着这段C++程序:
#include <iostream> #include <string> int main() { while(std::cin){ std::string s; std::cin >> s; std::cout << s; } }
当前问题:输入内容能显示在目标终端,但程序始终卡在std::cin处,未完成输入确认。需要实现发送输入后,效果如同按下回车键,让程序正常读取输入。
解决方案
在输入内容末尾添加换行符:
std::cin >> s以换行符作为输入结束的触发标志,你需要在发送的内容末尾加入换行符。可以用以下两种方式实现:- 使用
echo -e解析转义字符:echo -e "some_input\n" > /dev/pts/0 - 使用
printf(默认支持转义序列):printf "some_input\n" > /dev/pts/0
- 使用
避免使用
write命令:write会在发送内容前后附加终端标识等额外信息,可能干扰程序对输入的解析,直接重定向到/dev/pts/0是更可靠的方式。优化程序的输入读取逻辑(可选):如果需要读取包含空格的整行输入,可以将程序中的
std::cin >> s替换为std::getline(std::cin, s),配合末尾的换行符,能更稳定地触发输入读取。
内容的提问来源于stack exchange,提问作者XRO
相关产品推荐
相关产品推荐

