背景和前景bash / zsh作业,而无需在“续/挂起”消息中添加换行符

Kev*_*rke 12 vim bash zsh foreground job-control

我有一个过程是这样的:

  • 运行一个在一堆文件中生成一堆结果的命令
  • 在vim中打开文件
  • 编辑结果之一
  • 背景vim,获取下一个结果,前景vim
  • 重复直到列表完成

但是,每次背景和前景vim时,bash / zsh都会打印两条如下所示的消息:

[1]  + 4321 continued  nvim

[1]  + 4321 suspended  nvim
Run Code Online (Sandbox Code Playgroud)

这些很烦人,因为它们占用了屏幕空间,最终结果过滤掉了屏幕。我必须重新运行该命令或连续上下滚动才能找到它。

有没有一种方法可以获取“续/挂起”消息以避免添加太多换行符?或者,我可以完全压制它们吗?

xil*_*pex 6

方法如下:


这不是执行此操作的最有效方法,但这是一种有效的方法。这是一个假定的文件结构:

backgroundRun.sh
|
tmp
|
|_ outFile.txt
Run Code Online (Sandbox Code Playgroud)

这是怎么backgroundRun.sh会看:

backgroundRun.sh:

#backgroundRun.sh
myCommand > tmp/outFile.txt 2>&1 &
Run Code Online (Sandbox Code Playgroud)

代码输出:

./backgroundRun.sh
user@domain~$
Run Code Online (Sandbox Code Playgroud)

怎么运行的:

基本概念是myCommand(在backgroundRun.shtmp/outFile.txt运行的所有输出都存储在中,而在后台运行。

PS:outFile.txt将是一个空文件(占位符)。


这是一种有效的方法。这个问题是输出将被回显到屏幕上(如果有的话)。就像这样一个简单的命令:

(myCommand &) #Hit enter:
user@domain~$
Run Code Online (Sandbox Code Playgroud)

工作原理: 此代码是关于简单性的。它所做的只是子外壳程序中的命令(在后台)。


这是另一种有效的方法。在这里,您只需要一个文件:backgroundRun.sh。这是代码:

backgroundRun.sh:

myCommand & > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

代码输出:

./backgroundRun.sh
user@domain~$
Run Code Online (Sandbox Code Playgroud)

怎么运行的:

它运行命令,并将其输出到/dev/null。如果这不起作用,则会给出一个error(2>&1)。

PS:此代码仅在* nix / POSIX系统上有效,/dev/null在其他OS中不存在


df7*_*899 5

并不是完整的解决方案,但行数多于注释所允许的...

以下方法可以减少空白行的数量(在Raspbian / Debian上使用bash进行了测试,仅使用进行了测试vi)。关键步骤是以bash交互方式启动嵌套,但隐藏stderr输出:

bash -i 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

这会暂时抑制作业控制消息,但也会隐藏交互式外壳,因此您需要放心键入,例如:

vi firstfile
Run Code Online (Sandbox Code Playgroud)

然后,当您作为背景vi(例如CtrlZ)时,通常的[1]+ Stopped vi firstfile消息将按预期被抑制。这是到目前为止的总输出:

~ $ bash -i 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

fg键入(再次输入盲人),这将返回到vi会议。但是,当您下次使用background时vi,这将显示另一行输出,以确认先前的前景:

~ $ bash -i 2>/dev/null
vi firstfile
Run Code Online (Sandbox Code Playgroud)

这是对大多数不希望有的行的改进,但随后的每行fg都会提示出另外一条反馈行。可以通过输入以下内容来“变通”:

fg>a
Run Code Online (Sandbox Code Playgroud)

- a是一个虚拟文件,带有一个短名称以保存输入fg>/dev/null

这足以完全停止作业控制输出。几个shell脚本会有所帮助,但是感觉可以进一步完善……我期待看到更多答案。