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, hvorforlocal 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, skrivls;#
kommenterer hvad der var der, og kørls
-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