【问题标题】:Run a task in the background that waits until a certain word is entered in the terminal在后台运行一个任务,直到在终端中输入某个单词
【发布时间】: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,后台进程不会阻塞吗?

标签: bash shell terminal sh


【解决方案1】:

这取决于您的操作系统。对于 Mac,您需要在 /usr/local/bin 或 /usr/bin 中创建一个可执行文件。那是执行所有 bash 命令的目录。你会发现“time”、“python”或“whoami”之类的东西存储在那里。实际的可执行文件可以是任何东西,但您要尽量保持简单,使用带有 shebang 的 python 脚本。然后将文件制作成 unix 可执行文件。实际程序可以很简单,强行退出“后台进程”的进程id即可。我不确定 Windows 如何组织它们的“bin”,但可能是类似的。

【讨论】:

  • 有点跑题了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2014-04-04
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多