1

如果我有一个在后台运行的工作,比如文件尾部的一个非常特定的 grep,即tail -f /var/log/syslog | grep -i failure,该命令的输出将打印到我的终端,从而分解我正在输入的任何内容。

这相当于 Cisco 路由器中“vty”或“con”线路中的“同步记录”。我知道在 Cisco 设备中,如果未启用“同步记录”并且您正在终端上键入,则任何向终端吐出的内容都会中断您正在键入的内容。如果您在终端上启用“同步记录”,消息仍会吐出,但您输入的命令字符串会立即恢复到下一行。

在 BASH 中,我虽然有一个组合键可以恢复正在输入的命令字符串,但我不记得或找出那个组合键是什么。

4

3 回答 3

2

您输入的行不会被输出改变。唯一的问题是你再也看不到它了。

有一个 readline 命令,redraw-current-line正如它所说的那样,重绘当前行。默认情况下,bash 不会将该命令绑定到任何键序列,这使得使用起来有点尴尬。Bash 绑定Ctrl+Lclear-screen命令,该命令也将重绘当前行,但它清除屏幕的副作用可能有点不受欢迎。

如果你想启用这个功能,你需要找到一些键序列来绑定命令。例如,您可以绑定Ctrl+Lredraw-current-line使用EscCtrl+Lfor clear-screen。要做到这一点:

bind '"\C-l"':redraw-current-line
bind '"\e\C-l"':clear-screen

当然,这只是为了实验;它只会在当前的终端会话中生效。您需要将其放入您的bash启动文件中以使其具有粘性。

于 2013-06-18T20:48:44.817 回答
1

我通常按Ctrl+L​​。缺点是它也会清除屏幕。

于 2013-06-18T18:43:48.093 回答
1

我个人对该问题的解决方案是将后台作业的输出重定向到一个文件,例如。尾 -f /var/log/syslog | grep -i 失败 > foo.myout

我假设由于某种原因这是不可能的。你试过控制-p吗?

于 2013-06-18T18:44:31.940 回答