在 bash(通常使用 git)中工作时,我经常遇到的情况是,我启动了一些命令,当该命令正在执行时(这可能需要一段时间),我想开始编写下一个要立即执行的命令,而无需等待以便完成上一个命令。如果我在上一个命令仍在执行时完成下一个命令的编写,则下一个命令应该等待上一个命令完成才能真正开始。
到目前为止我发现的不充分的选择是:
开始编写下一个命令。
问题是我是盲写的:我可以输入下一个命令,但我看不到我正在输入的内容。当涉及制表符完成时,这尤其成问题,因为它的行为“不可预测”(例如,我很难猜测是否
cd s
Tab会扩展为cd src
)。使用在后台执行上一个命令
&
。这意味着上一个命令的输出与我正在编写的命令交错。最终结果是,如果前面的命令输出足够频繁,那么它几乎和选项 #1 一样糟糕。
使用隐藏前一个命令的输出
> /dev/null
这样做的问题是前一个命令的输出通常很重要,尤其是在失败的情况下。
重申一下,有没有办法获得这样的环境:
- 我可以在上一个命令执行时编写下一个命令
- 我可以看到我正在编写的命令
- 制表符补全正常工作
- 上一个命令的输出是可见的
答案1
你有两个选择:
该
screen
实用程序虽然不随某些 Linux 发行版一起提供。默认情况下,Solaris (Unix) 中也不包含它。以 Centos 为例:
yum install screen
这是一个简短教程屏幕实用程序的使用情况。
命令
nohup
;相应地重定向 stdout 和 stderr:例子:
nohup command &
答案2
您可以使用以下命令将当前运行的命令放入后台:
Ctrl-Z
暂停该过程,并且bg
在后台恢复它。
然后您会收到提示,您可以开始输入下一个命令。
不过,上一个命令的 stdout 和 stderr 仍会转到您的终端。