Kan jeg konfigurere bash til at udføre “ rydde ” før hver kommando, der indtastes i konsollen?

Jeg vil gerne konfigurere bash til at udføre clear -kommando hver gang jeg skriver en kommando i terminalen (før udføre min kommando). Hvordan kan jeg gøre det?

Jeg bruger Debian Linux.

Kommentarer

  • Du finder denne tråd er nyttig.
  • Bare nysgerrig: Hvad ' er din ansøgning om dette? Undtagen når jeg ' m fejlfindingsprogrammer med meget output, jeg vil normalt holde så meget som muligt på skærmen for at hjælpe mig med at holde styr på den kontekst, jeg ' m arbejder ind.

Svar

Bash har en forkommandokrog . Sort.

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 klistrede ovenstående i en konsole-terminal, og output fra hver kommando, som jeg efterfølgende indtastede, blev ryddet, før jeg kunne læse det. Mangler jeg noget? Hvad sker der også med dette (og det andet svar nedenfor), hvis jeg påberåber et multi-line bash script hvor mere end en linje (eller en anden linje end den sidste) genererer inter esting output?
  • @Joe Dette skulle rydde skærmen, når du har trykket på Enter, før kommandoen udføres. Det virker sådan her for mig. Preexec-krog udføres for hver interaktiv kommando, det betyder ikke ' om kommandoen er en indbygget eller en ekstern kommando eller mange kommandoer.
  • @ Joe, du skal tilføje denne linje nedenfor, gør ingenting, hvis komplet [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; problemet er, at PROMPT_COMMAND køres og også fanges efter den aktuelle kommando; Kan også nogen fortælle mig, hvorfor local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; er her?
  • @JamesAndino history -1 udskriver den sidste kommandolinje med et historiknummer foran. Sed-filteret fjerner historiknummeret.
  • @JamesAndino Det fik det til at fungere (og jeg kan se, at Giles tilføjede det til sit svar.)

Svar

bind "RETURN: "\e[1~clear; \e[4~\n"" 

Herefter trykker du hver gang på tilbage i stedet for bare at skrive \n den flytter til begyndelsen af linjen, indtast teksten clear;, flyt derefter til slutningen og indtast \n som forventet.

Kommentarer

  • En ny linje får prompt til at blive udskrevet alligevel, så at sætte det klare i prompten opnår det samme uden at forurene kommandohistorikken med clear kommandoer.
  • @ jw013 Forskellen er, at i mit tilfælde clear udføres, før kommandoen og kommandooutputtet forsvinder '. Men i tilfælde af hurtig det gør det.
  • Jeg ville ønske, at der var en måde at gøre dette uden at skulle ændre selve kommandolinjen – jeg er ' sikker på, at dette ville bryde på interessante måder på komplekse eller multi-line kommandoer, men jeg kan ' ikke finde nogen bedre måde at gøre dette på.
  • @ jw013, du har ret, det bryder ikke for flere linjer .. Den indsætter clear; til udgangen for hver ekstra \n.
  • dette tip er meget god thx !! Jeg havde brug for at binde en bestemt kode til F2, men nogle gange har linjen en kommando, jeg har skrevet, men ikke udført, så med denne ex .: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"", den flytter til begyndelsen, skriv ls;# kommenterer hvad der var der, og kør ls -kommandoen korrekt! thx!

Svar

fra et spørgsmål, jeg stillede i dag (med kredit til bruger @aecolley s svar ):

bind ""\C-m": "\C-l\C-j"" 

\C-m simulering “Enter” -tasten, \C-l simulerer Ctrl+l som det er klart, og \C-j er “newline-and-indent”, så kommandoen er bindende Enter-nøgle til Ctrl + l & Ctrl + j

der fungerer på GNU bash, version 3.2.53 (1) -release (x86_64-apple-darwin14) og de andre svar på denne tråd gør det ikke. også dette forurener ikke historien med “klare” kommandoer hver anden kommando.

Kommentarer

  • note: Hvis du bruger over ssh, skal du udføre det i det miljø, eller der opstår underlighed.
  • fedt det fungerer på min ubuntu 16.04 terminal, tak, men hvordan fungerer det, kan du give et link eller noget dokumentation tak?

Svar

Overvej kun at rydde, når du vil

cb4() { preexec () { clear } } 

Dette bruger en krog kaldet preexec, bekræftet fungerer også med zsh

Derefter vil enhver session, du vil rydde automatisk, før hver kommando, du kører : cb4

Hvis du er sikker, vil du altid rydde i enhver sammenhæng

preexec () { clear } 

Og a hvis du faktisk vil nulstille terminalen

skal du erstatte ordet clear med tput reset

tput er valgfri, men fremskynder nulstillingsprocessen

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *