Chciałbym skonfigurować bash, aby wykonywał clear
polecenie za każdym razem, gdy wpisuję jakieś polecenie w terminalu (przed wykonaniem polecenia). Jak mogę to zrobić?
Używam Debian Linux.
Chciałbym skonfigurować bash, aby wykonywał clear
polecenie za każdym razem, gdy wpisuję jakieś polecenie w terminalu (przed wykonaniem polecenia). Jak mogę to zrobić?
Używam Debian Linux.
Odpowiedzi:
Bash ma wcześniejszy hak . Raczej.
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
przed wykonaniem polecenia. Dla mnie to działa. Preexec hook jest wykonywany dla każdego polecenia interaktywnego, nie ma znaczenia, czy polecenie jest poleceniem wbudowanym czy zewnętrznym, czy też wieloma poleceniami.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
problem polega na tym, że PROMPT_COMMAND jest uruchamiany i uwięziony po właściwym poleceniu; Czy ktoś może mi powiedzieć, dlaczego local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
tu jest?
history -1
drukuje ostatni wiersz poleceń, z numerem historii z przodu. Filtr sed usuwa numer historii.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Następnie za każdym razem, gdy naciśniesz returnzamiast pisać \n
, przejdzie na początek wiersza, wprowadzi tekst clear;
, a następnie przejdzie na koniec i wprowadzi \n
zgodnie z oczekiwaniami.
clear
poleceń poleceniami.
clear
jest wykonywane przed wydaniem polecenia, a dane wyjściowe polecenia nie znikają. Jednak w przypadku pytania natychmiastowego.
clear;
do wyjścia dla każdego dodatkowego \n
.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
przejdzie na początek, wpisz ls;#
komentarz do tego, co tam było i uruchom ls
polecenie poprawnie! dzięki!
z pytania, które dziś zadałem (z podziękowaniem dla odpowiedzi użytkownika @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
\C-m
Symulowanie klawisza „Enter”, to \C-l
symulacja Ctrl+l
, jak to jest jasne, a \C-j
to „newline-and-indent”, więc komenda jest wiążąca Wprowadź klucz do Ctrl + L & Ctrl + J
który działa na GNU bash, wersja 3.2.53 (1) -release (x86_64-apple-darwin14) i inne odpowiedzi w tym wątku nie. nie powoduje to również zanieczyszczenia historii „czystymi” poleceniami co każde inne polecenie.
cb4() {
preexec () {
clear
}
}
Używa haka o nazwie preexec
, potwierdzone, działa również z zsh
Następnie każda sesja, którą chcesz automatycznie wyczyścić przed każdym uruchomionym poleceniem: cb4
preexec () {
clear
}
zastąpić słowo clear
ztput reset
tput
jest opcjonalny, ale przyspiesza proces resetowania