Chciałbym skonfigurować bash, aby wykonywał clearpolecenie 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ł clearpolecenie 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
Enterprzed 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 -1drukuje 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 \nzgodnie z oczekiwaniami.
clearpoleceń poleceniami.
clearjest 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 lspolecenie 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-mSymulowanie klawisza „Enter”, to \C-lsymulacja Ctrl+l, jak to jest jasne, a \C-jto „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 clearztput reset
tput jest opcjonalny, ale przyspiesza proces resetowania