Answers:
Bash有一个预指令钩子。有点。
preexec () {
clear
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
Enter
在执行命令之前,按键后应清除屏幕。对我来说,它像这样工作。对于每个交互式命令都会执行preexec挂钩,无论该命令是内置命令,外部命令还是许多命令都无关紧要。
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
,则不执行任何操作: 问题是PROMPT_COMMAND正在运行,并且在实际命令之后也被捕获;还可以有人告诉我为什么 local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
在这里吗?
history -1
打印最后一个命令行,并在前面加上历史记录号。sed过滤器将删除历史记录编号。
bind 'RETURN: "\e[1~clear; \e[4~\n"'
之后,每按一次,return而不是仅仅按\n
一下,它将移至行的开头,输入文字clear;
,然后移至末尾并按\n
预期输入。
clear
。
clear
,该命令是在命令执行之前执行的,并且命令输出不会消失。但是在有提示的情况下会这样做。
clear;
会在输出中插入多余的内容\n
。
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
它将移至开头,键入ls;#
注释内容,然后ls
正确运行该命令!谢谢!
从我今天问的一个问题(感谢用户@aecolley的回答):
bind '"\C-m": "\C-l\C-j"'
该\C-m
模拟“回车”键,\C-l
模拟Ctrl+l
,因为它是明确的,\C-j
就是“换行和缩进”,所以命令结合回车键为Ctrl + L&按Ctrl + J
可以在GNU bash版本3.2.53(1)-release(x86_64-apple-darwin14)上运行,而该线程上的其他答案则不行。同样,这不会每隔一个命令就用“清除”命令污染历史记录。