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 alocal 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.
clear;
elemeket a kimenetekbe minden egyes extra \n
címhez. 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