Konfigurálhatom a bash-t a “ törlés ” végrehajtására a konzolba beírt minden parancs előtt?

Szeretném beállítani a bash-t, hogy futtassa az clear parancsot, valahányszor beírok valamilyen parancsot a terminálba (mielőtt végrehajtva a parancsomat). Hogyan tudom ezt megtenni?

Debian Linuxot használok.

Megjegyzések

  • Megtalálja a ez a szál hasznos.
  • Csak kíváncsi: Mit ' alkalmazz erre? Kivéve, ha ' m sok kimenettel rendelkező hibakereső programokat, általában a lehető legtöbbet szeretném tartani a képernyőn, hogy segítsen nyomon követni a kontextust I ' m dolgozik.

Válasz

Bash előparancs horog . Rendezés.

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 

Megjegyzések

  • Gilles: beillesztettem a fentieket egy konsole terminálba, és minden egyes később beírt parancs kimenete törlődött, mielőtt elolvashattam volna. Hiányzik valami? Ezenkívül mi történik ezzel (és a lenti másik válaszsal), ha többsoros bash szkriptet hívok meg ahol egynél több vonal (vagy az utóbbitól eltérő bármely vonal) generál inter a kimenet letiltása?
  • @Joe Ennek törölnie kell a képernyőt, miután megnyomta a Enter parancsot, mielőtt végrehajtotta a parancsot. Nekem így működik. A preexec kampó minden interaktív parancshoz végrehajtásra kerül, nem számít, hogy ' nem számít, hogy a parancs beépített vagy külső parancs, vagy sok parancs.
  • @ Joe, hozzá kell adnod ezt a sort, és ne csinálj semmit, ha teljes a [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; probléma, az a probléma, hogy a PROMPT_COMMAND fut, és a tényleges parancs után is csapdába esik; Azt is megtudná mondani valaki, hogy miért van itt a local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;?
  • @JamesAndino history -1 kinyomtatja az utolsó parancssort történelemszám elöl. Az sed szűrő eltávolítja az előzmények számát.
  • @JamesAndino Ez működőképessé tette (és úgy látom, Giles hozzáadta a válaszához.)

Válasz

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

Ezt követően minden egyes megnyomásakor a return gombra kattint, ahelyett, hogy csak a a sor elejére lép, írja be a clear; szöveget, majd lépjen a végére, és írja be az \n ahogy az várható volt.

Megjegyzések

  • Egy új sor a nyomtatást mindenképpen kinyomtatja, így a törlés törlése a promptba ugyanazt érinti anélkül, hogy a parancselőzményeket clear parancsokkal szennyezné.
  • @ jw013 A különbség az, hogy az én esetemben clear parancsot a parancs és a kimenet ' eltűnése előtt hajtják végre. Azonban a felszólítás esetén ez megtörténik.
  • Szeretném, ha lenne valamilyen módszer erre, anélkül, hogy magát a parancssort módosítanánk – biztos vagyok benne, hogy <

érdekes módon szakíthat összetett vagy többsoros parancsokon, de ' nem találok erre jobb módot.

  • @ jw013, igazad van, ez nem szakad meg többsorosaknál. Ez beilleszti a clear; elemeket a kimenetekbe minden egyes extra \n címhez.
  • ezt a tippet nagyon jó thx !! Szükségem volt bizonyos kódok összekapcsolására az F2-hez, de néha a sorban van néhány parancs, amelyet beírtam, de nem hajtottam végre, így ezzel a példával: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"" az elejére fog lépni, írja be ls;# kommentálva, mi volt ott, és futtassa megfelelően a ls parancsot! thx!
  • Válasz

    egy ma feltett kérdésemről (a @aecolley válasza ):

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

    A \C-m szimuláló az “Enter” billentyűt, a \C-l szimulálva a Ctrl+l -t, amint kitisztul, és az \C-j az “newline-and-indent”, ezért a parancs kötelezővé teszi az Enter billentyűt a Ctrl + l & Ctrl + j

    használatához, amely a GNU bash verzióján működik 3.2.53 (1) -release (x86_64-apple-darwin14), és a szál többi válasza nem. ez sem szennyezi a történelmet minden más parancs “clear” parancsával.

    Megjegyzések

    • megjegyzés: ha az ssh-t használja, akkor azt abban a környezetben kell végrehajtania, különben furcsaságok történnek.
    • kenje meg működik az ubuntu 16.04 terminálomon, köszönöm, de hogyan működik, tudnál egy linket vagy valami dokumentációt megadni?

    Válasz

    Csak akkor vegye fontolóra a törlést, ha szeretné

    cb4() { preexec () { clear } } 

    Ez egy preexec nevű horgot használ, a megerősített az zsh-vel is működik.

    Ezután minden olyan munkamenet, amelyet automatikusan törölni akar minden futtatott parancs előtt : cb4

    Ha biztos vagy benne, akkor mindig minden kontextusban törölni szeretnél

    preexec () { clear } 

    És a, ha valóban vissza akarja állítani a terminált

    cserélje le a clear szót a tput reset

    szóra

    tput opcionális, de felgyorsítja a visszaállítási folyamatot

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük