Я хотел бы настроить bash на выполнение clear
команды каждый раз, когда я набираю какую-либо команду в терминале (перед выполнением моей команды). Как я могу это сделать?
Я использую Debian Linux.
Я хотел бы настроить bash на выполнение clear
команды каждый раз, когда я набираю какую-либо команду в терминале (перед выполнением моей команды). Как я могу это сделать?
Я использую Debian Linux.
Ответы:
У Bash есть предварительная команда hook . Вроде.
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
Имитируя клавишу «Enter», то \C-l
имитируя , Ctrl+l
как это ясно , и \C-j
это «новая строка-и-отступа», поэтому команда является обязательным Введите ключ Ctrl + L & Ctrl + J
это работает на GNU bash, версия 3.2.53 (1) -релиз (x86_64-apple-darwin14), а другие ответы в этой теме - нет. кроме того, это не загрязняет историю командами «очистки» каждой другой команды.
cb4() {
preexec () {
clear
}
}
Это использует крючок называется preexec
, подтвержденные работы с Zsh тоже
Затем любой сеанс, который вы хотите автоматически очистить перед выполнением каждой команды: cb4
preexec () {
clear
}
заменить слово clear
наtput reset
tput
не является обязательным, но ускоряет процесс сброса