Jeg vil konfigurere bash til å utføre clear
-kommando hver gang jeg skriver inn en kommando i terminalen (før utføre kommandoen min). Hvordan kan jeg gjøre det?
Jeg bruker Debian Linux.
Kommentarer
- Du finner denne tråden er nyttig.
- Bare nysgjerrig: Hva ' søker du om dette? Bortsett fra når jeg ' m feilsøkingsprogrammer med mye produksjon, jeg vil vanligvis holde så mye som mulig på skjermen for å hjelpe meg med å holde rede på konteksten jeg ' Jeg jobber.
Svar
Bash har en forhåndskommandokrok . Slags.
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
Kommentarer
- Gilles: Jeg limte inn det ovennevnte i en konsole-terminal, og utdataene fra hver kommando jeg senere skrev inn ble ryddet før jeg kunne lese det. Mangler jeg noe? Hva skjer også med dette (og det andre svaret nedenfor) hvis jeg påkaller et multi-line bash-skript der mer enn en linje (eller en annen linje enn den siste) genererer inter esting output?
- @Joe Dette skal rydde skjermen etter at du har trykket på
Enter
, før du utfører kommandoen. Det fungerer slik for meg. Preexec-kroken blir utført for hver interaktiv kommando, det betyr ikke ' om kommandoen er en innebygd eller en ekstern kommando eller mange kommandoer. - @ Joe du må legge til denne linjen nedenfor, gjør ingenting hvis fullført
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
problemet er at PROMPT_COMMAND blir kjørt og også fanget etter den faktiske kommandoen; Kan også noen fortelle meg hvorforlocal this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
er her? - @JamesAndino
history -1
skriver ut den siste kommandolinjen, med et historienummer foran. Sed-filteret fjerner historikknummeret. - @JamesAndino Det fikk det til å fungere (og jeg ser Giles la det til i svaret.)
Svar
bind "RETURN: "\e[1~clear; \e[4~\n""
Etter det hver gang du trykker tilbake i stedet for bare å skrive \n
den vil flytte til begynnelsen av linjen, skriv inn teksten clear;
, flytt deretter til slutten og skriv \n
som forventet.
Kommentarer
- En ny linje fører til at ledeteksten uansett blir skrevet ut, så å sette det klare i ledeteksten oppnår det samme uten å forurense kommandohistorikken med
clear
kommandoer. - @ jw013 Forskjellen er at i mitt tilfelle
clear
kjøres før kommandoen og kommandoutgangen ' t forsvinner. I tilfelle med spørsmål, gjør det det. - Jeg skulle ønske det var noen måte å gjøre dette uten å måtte endre selve kommandolinjen – jeg ' er sikker på at dette bryte på interessante måter på komplekse eller flerlinjekommandoer, men jeg kan ' ikke finne noen bedre måte å gjøre dette på.
- @ jw013, du har rett, det bryter for flere linjer .. Den setter inn
clear;
til utgangen for hver ekstra\n
. - dette tipset er veldig bra thx !! Jeg trengte å binde en bestemt kode til F2, men noen ganger har linjen en kommando jeg skrev, men ikke utførte, så med denne eks .:
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
vil den flytte til begynnelsen, skrivls;#
kommenterer hva som var der, og kjørls
-kommandoen riktig! thx!
Svar
fra et spørsmål jeg stilte i dag (med æren til brukeren @aecolley s svar ):
bind ""\C-m": "\C-l\C-j""
\C-m
simulering «Enter» -tasten, \C-l
som simulerer Ctrl+l
som det er klart og \C-j
er «newline-and-indent», så kommandoen er bindende Enter nøkkel til Ctrl + l & Ctrl + j
som fungerer på GNU bash, versjon 3.2.53 (1) -release (x86_64-apple-darwin14) og de andre svarene på denne tråden gjør det ikke. også dette forurenser ikke historien med «klare» kommandoer annenhver kommando.
Kommentarer
- merknad: Hvis du bruker over ssh, må du utføre det i det miljøet eller rare ting skjer.
- greate it fungerer på min ubuntu 16.04 terminal, takk, men hvordan fungerer det, kan du gi en lenke eller noe dokumentasjon takk?
Svar
Vurder bare å rydde når du vil
cb4() { preexec () { clear } }
Dette bruker en krok kalt preexec
, bekreftet fungerer også med zsh
Så vil enhver økt du vil slette automatisk før hver kommando du kjører : cb4
Hvis du er sikker på at du alltid vil fjerne i alle sammenhenger
preexec () { clear }
Og a hvis du faktisk vil tilbakestille terminalen
erstatt ordet clear
med tput reset
tput
er valgfritt, men fremskynder tilbakestillingsprosessen