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

Shell 后台任务是否有办法通知终端打印新的提示?,shell,terminal,background-process,backgrounding,Shell,Terminal,Background Process,Backgrounding,我想写一个可以作为后台任务运行的程序(即我的东西&),并在必要时漂亮地提供相关输出 然而,对于打印到终端的后台任务,总是有这样一个恼人的小进展: bash-3.2$我的东西&▏ bash-3.2$我的东西& bash-3.2$--你好,我的东西 --现在让我开始做我最擅长的… ▏ …请注意,我们现在在光标前没有提示,更不用说还有一个丑陋的错误提示,我的程序在打印提示时吐出了输出 因此,我想要三件事,其中只有一件我不知道该怎么做: 检测我的程序是否在后台运行,并相应地更改我的输出/操作(即

我想写一个可以作为后台任务运行的程序(即
我的东西&
),并在必要时漂亮地提供相关输出

然而,对于打印到终端的后台任务,总是有这样一个恼人的小进展:


bash-3.2$我的东西&▏


bash-3.2$我的东西&
bash-3.2$--你好,我的东西
--现在让我开始做我最擅长的…

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

因此,我想要三件事,其中只有一件我不知道该怎么做:

  • 检测我的程序是否在后台运行,并相应地更改我的输出/操作(即打印出较少的无用信息;将更多信息排队,以便仅在程序再次预发时输出;等等)
  • 当突然将信息打印到一个我们一直处于后台的终端时,清除提示(如果已经存在)
  • 在我完成打印到终端的内容后通知终端,以某种方式迫使终端在我添加的内容下方重新绘制新的提示
  • 第三个是唯一一个我完全不知道该怎么做的;虽然我对另外两个有一些了解,但如果有任何链接或建议也将不胜感激

    同样值得赞赏的是,甚至可以链接到任何程序(任何语言/环境),这些程序已经有了操作该程序的模式;因为我可以尝试对它们的实现进行反向工程/探索。

    这对我来说很有效:

    echo 'sleep 1; echo; echo hi' > /tmp/hi
    chmod +x /tmp/hi
    zsh
    /tmp/hi &
    asdfsadf # type whatever, here.
    
    在'hi'得到echo'd后,zsh知道用完整的'asdfasdf'重新绘制提示


    因此,毫不奇怪:zsh比bash更好。

    有用的知识;但它的应用范围还不够广泛,无法解决问题。好吧,它解决了2和3。至于#1,您可以捕获SIGTSTP并使其对输出进行详细描述。不过,仍然有一些挑战。这可能对你有所帮助。