如果我有一个在后台运行的作业,就像文件尾部的一个非常特定的grep,即tail -f /var/log/syslog | grep -i failure
,该命令的输出将被打印到我的终端,从而破坏了我输入的内容
这相当于Cisco路由器中“vty”或“con”行中的“logging synchronous”。我知道在思科设备中,如果未启用“日志记录同步”并且您在终端上输入内容,则任何向终端吐出的内容都会中断您正在键入的内容。如果在终端上启用“logging synchronous”,则消息仍然会吐出,但您输入的命令字符串会立即恢复到下一行。
在BASH中,我有一个键组合可以恢复正在键入的命令字符串,但我无法回想起或找出那个键组合是什么。
答案 0 :(得分:1)
我通常按 Ctrl + L 。缺点是它也会清除屏幕。
答案 1 :(得分:1)
我对该问题的个人解决方案是将后台作业的输出重定向到文件,例如。 tail -f / var / log / syslog | grep -i failure> foo.myout
我认为由于某种原因这是不可能的。你试过control-p吗?
答案 2 :(得分:1)
您输入的行未按输出更改。唯一的问题是你再也看不到了。
有一个readline命令redraw-current-line
,就像它说的那样,重绘当前行。默认情况下,bash不会将该命令绑定到任何键序列,这使得使用起来有点尴尬。 Bash将 Ctrl + L 绑定到clear-screen
命令,该命令也将重绘当前行,但清除屏幕的副作用可能有点不受欢迎。
如果要启用此功能,则需要找到一些将命令绑定到的键序列。例如,您可以将 Ctrl + L 绑定到redraw-current-line
,并使用 Esc Ctrl + L 获取clear-screen
。要做到这一点:
bind '"\C-l"':redraw-current-line
bind '"\e\C-l"':clear-screen
当然,那只是为了实验;它只会在当前终端会话中生效。您需要将它放入bash
启动文件中,以使其粘滞。