是否有办法让后台任务通知终端打印新提示?

时间:2012-11-05 07:08:43

标签: shell terminal background-process backgrounding

我想编写一个可以作为后台任务运行的程序(即my-thing &),并在必要时精美地提供相关输出。

然而,随着打印到终端的后台任务,总是会出现这种烦人的小进展:

bash-3.2$ my-thing &

bash-3.2$ my-thing &
bash-3.2$ -- Hello from my-thing!
-- now let me start doing what I do best ...

...注意我们现在没有光标前的提示,更不用说有一个丑陋的错误提示,我的程序在已经打印出提示时吐出输出。

因此,我想要三件事,其中只有一件我不知道如何去做:

  1. 检测我的程序是否在后台运行,并相应地改变我的输出/操作(即打印出较少无用的信息;将进一步的信息排队,只有当程序再次被预先处理时输出; etceteras)
  2. 当突然向我们已经背景的终端打印信息时,清除提示(如果它已经存在)
  3. 在我完成了打印到终端的任何内容之后,通知终端,以某种方式强制它在我添加的内容下面重新绘制新提示
  4. 第三个是唯一一个我完全不知道如何去做的人;虽然我对其他两个有一些暗示,但任何链接或建议都会受到赞赏。

    同样值得赞赏的是,甚至可以链接到任何已经具有操作模式的程序(任何语言/环境);因为我可以尝试对他们的实施进行反向工程设计。

1 个答案:

答案 0 :(得分:2)

这对我有用:

echo 'sleep 1; echo; echo hi' > /tmp/hi
chmod +x /tmp/hi
zsh
/tmp/hi &
asdfsadf # type whatever, here.

'hi'得到echo之后,zsh知道用'asdfasdf'完整地重绘你的提示。

所以,没有什么大惊喜:zsh比bash好。