我想将 bash 配置为clear
每次在终端中键入某些命令时(在执行命令之前)执行命令。我怎样才能做到这一点?
我正在使用 Debian Linux。
答案1
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
答案2
bind 'RETURN: "\e[1~clear; \e[4~\n"'
之后,每次您按下return而不是仅仅写入时,\n
它都会移动到行首,输入文本clear;
,然后移动到末尾\n
并按预期输入。
答案3
来自我今天问的一个问题(归功于用户@aecolley的回答):
bind '"\C-m": "\C-l\C-j"'
模拟\C-m
‘Enter’键,很明显,\C-l
模拟的是“换行和缩进”,所以该命令将 Enter 键绑定到 Ctrl+l & Ctrl+jCtrl+l
\C-j
适用于 GNU bash,版本 3.2.53(1)-release (x86_64-apple-darwin14),而该线程上的其他答案则不适用于。此外,这不会像其他命令那样用“清除”命令污染历史记录。
答案4
仅在需要时考虑清除
cb4() {
preexec () {
clear
}
}
这使用了一个名为 的钩子preexec
,已确认也适用于 zsh
然后,您希望在运行每个命令之前自动清除任何会话:cb4
如果你确定你总是想在每个上下文中清除
preexec () {
clear
}
如果您确实想重置终端
将该词替换clear
为tput reset
tput
是可选的,但可以加快重置过程