Kev*_*rke 12 vim bash zsh foreground job-control
我有一个过程是这样的:
但是,每次背景和前景vim时,bash / zsh都会打印两条如下所示的消息:
[1] + 4321 continued nvim
[1] + 4321 suspended nvim
Run Code Online (Sandbox Code Playgroud)
这些很烦人,因为它们占用了屏幕空间,最终结果过滤掉了屏幕。我必须重新运行该命令或连续上下滚动才能找到它。
有没有一种方法可以获取“续/挂起”消息以避免添加太多换行符?或者,我可以完全压制它们吗?
这不是执行此操作的最有效方法,但这是一种有效的方法。这是一个假定的文件结构:
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.sh
)tmp/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中不存在
并不是完整的解决方案,但行数多于注释所允许的...
以下方法可以减少空白行的数量(在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脚本会有所帮助,但是感觉可以进一步完善……我期待看到更多答案。