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脚本会有所帮助,但是感觉可以进一步完善……我期待看到更多答案。