Kan jeg konfigurere bash til å utføre “ tømme ” før hver kommando som skrives inn i konsollen?

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 hvorfor local 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, skriv ls;# kommenterer hva som var der, og kjør ls -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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *