【发布时间】:2020-11-13 15:05:40
【问题描述】:
我想从终端运行一组后台命令作为脚本或函数,等待在前台输入某个命令。我不想只等待按键,我需要单词、字符串或字符 + 输入。我已经尝试过阅读 bash 历史中的最后一条命令之类的东西,但我一无所获。
sh -c "until [ "$(history | tail -n 1 | awk '{print $2}')" = donut ];\
do : ; done; echo 'Why did you just type donut you doughnut? \
That is not even a word let alone a command.' &" &
sh -c "until [ "$(history | tail -n 1 | awk '{print $2}')" = ":" ]; do sleep 1 ; done; echo gotcha" &
理想情况下,如果单词不是命令,我不想要任何输出,例如“找不到命令”,并且如果它是命令,我不希望执行该单词。这就是为什么我尝试了 : 命令,它既是又不是。
我也尝试以各种方式寻找":\n"。我可能在这里用 history 命令找出了错误的树,并怀疑与 cat /dev/tty 有关系。
有什么想法吗?
【问题讨论】:
-
我倾向于基于 tty 的解决方案;看看这个answer: read/write to tty* device 了解一些基础知识;如果您仍然遇到问题,我建议您打开一个新问题并提供有关您通过 ttys 尝试过的内容的详细信息
-
@markp-fuso :感谢您提供链接。我一直认为已经放在后台的进程不能再与tty交互了。由于父(即前台)进程是交互式shell并且仍然可以控制tty,如果他想打开同一个tty,后台进程不会阻塞吗?