Haluan määrittää bashin suorittamaan komennon clear
joka kerta kun kirjoitan komentoa terminaaliin (ennen komennon suorittaminen). Kuinka voin tehdä sen?
Käytän Debian Linuxia.
Kommentit
- Löydät tämä ketju hyödyllinen.
- Vain utelias: Mitä ' haet tähän? Paitsi kun ' m virheenkorjausohjelmia, joissa on paljon ulostuloja, haluan yleensä pitää mahdollisimman paljon näytöllä, jotta voin seurata kontekstia I ' m työskentelee.
Vastaa
Bash on esikomennokoukku . Eräänlainen.
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
Kommentit
- Gilles: Liitin yllä oleva konsoliterminaaliin ja jokaisen myöhemmin kirjoittamani komennon tulos tyhjennettiin, ennen kuin voin lukea sitä. Puuttuuko jotain? Mitä tapahtuu tälle (ja muulle vastaukselle alla), jos kutsun monirivisen bash-komentosarjan jossa useampi kuin yksi viiva (tai mikä tahansa muu viiva kuin viimeinen) tuottaa inter estetään ulostulo?
- @Joe Tämän pitäisi tyhjentää näyttö, kun painat
Enter
, ennen komennon suorittamista. Se toimii näin minulle. Preexec-koukku suoritetaan jokaiselle interaktiiviselle komennolle, sillä ei ole ' väliä onko komento sisäänrakennettu vai ulkoinen komento vai monia komentoja. - @ Joe, sinun on lisättävä tämä rivi, älä tee mitään, jos täydellinen
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
ongelma on, että PROMPT_COMMAND on käynnissä ja myös loukussa todellisen komennon jälkeen; Voisiko joku kertoa minulle myös, miksilocal this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
on täällä? - @JamesAndino
history -1
tulostaa viimeisen komentorivin historianumero edessä. Sed-suodatin poistaa historianumeron. - @JamesAndino Se sai sen toimimaan (ja näen Gilesin lisäneen sen vastaukseensa.)
Vastaus
bind "RETURN: "\e[1~clear; \e[4~\n""
Sen jälkeen joka kerta kun painat return sen sijaan, että kirjoitat vain \n
se siirtyy rivin alkuun, kirjoita teksti clear;
, siirry sitten loppuun ja kirjoita \n
odotetusti.
Kommentit
- Uusi rivi saa kehotteen tulostumaan joka tapauksessa, joten selkeän lisääminen kehotteeseen saa aikaan saman asian saastuttamatta komentohistoriaa
clear
-komennoilla. - @ jw013 Ero on siinä, että minun tapauksessani
clear
suoritetaan ennen kuin komento ja komennon lähtö <
ei häviä. Kuitenkin siinä tapauksessa, että se tapahtuu nopeasti.
clear;
jokaisen ylimääräisen \n
tulokseen. bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
se siirtyy alkuun, kirjoita ls;#
kommentoi mitä siellä oli, ja suorita ls
-komento oikein! thx! Vastaa
tänään esittämästäni kysymyksestä (kiitos käyttäjälle @aecolley” vastaus ):
bind ""\C-m": "\C-l\C-j""
\C-m
simuloi ”Enter” -näppäin, \C-l
, joka simuloi Ctrl+l
, kun se on selvä, ja > on ”newline-and-indent”, joten komento sitoo Enter-näppäintä Ctrl + l & Ctrl + j
joka toimii GNU bash -versiossa 3.2.53 (1) -release (x86_64-apple-darwin14) ja muut tämän ketjun vastaukset eivät. tämä ei myöskään saastuta historiaa ”tyhjennä” -komennoilla joka toinen komento.
Kommentit
- huomautus: jos käytät ssh: n yli, sinun on suoritettava se kyseisessä ympäristössä tai muuten tapahtuu outoja.
- voitele se toimii ubuntu 16.04 -päätteelläni, kiitos, mutta miten se toimii, voisitteko antaa linkin tai joitain asiakirjoja?
vastaus
Harkitse tyhjentämistä vain, kun haluat
cb4() { preexec () { clear } }
Tämä käyttää koukkua nimeltä preexec
, vahvistettu toimii myös zsh: n kanssa
Sitten kaikki istunnot, jotka haluat tyhjentää automaattisesti ennen kaikkia suoritettavia komentoja : cb4
Jos olet varma, haluat aina tyhjentää tiedot kaikissa tilanteissa
preexec () { clear }
Ja a jos todella haluat nollata päätelaitteen
korvaa sana clear
sanalla tput reset
tput
on valinnainen, mutta nopeuttaa nollausprosessia