Voinko määrittää bashin suorittamaan “ clear ” ennen jokaista komentoa, joka on kirjoitettu konsoliin?

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, miksi local 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.

  • Toivon, että tähän olisi ollut jokin tapa ilman, että sinun tarvitsee muokata komentoriviä – olen varma, että tämä rikkoa mielenkiintoisia tapoja monimutkaisissa tai monirivisissä komennoissa, mutta en voi ' löytää parempaa tapaa tehdä tämä.
  • @ jw013, olet oikeassa rikkoo monirivisiä .. Se lisää clear; jokaisen ylimääräisen \n tulokseen.
  • tämä kärki on erittäin hyvä thx! Minun piti sitoa tietty koodi F2: een, mutta joskus rivillä on jokin komento, jonka kirjoitin, mutta jota ei suoritettu, joten tällä esim .: 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

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *