Mohu nakonfigurovat bash tak, aby “ vymazal ” před zadáním každého příkazu do konzoly?

Chtěl bych nakonfigurovat bash tak, aby spouštěl příkaz clear pokaždé, když do terminálu napíšu nějaký příkaz (před provádění mého příkazu). Jak to mohu udělat?

Používám Debian Linux.

Komentáře

  • Najdete toto vlákno užitečné.
  • Jen jsem zvědavý: Jakou ' na to používáte? Kromě případů, kdy jsem ' m ladění programů se spoustou výstupu, obvykle chci uchovat co nejvíce na obrazovce, abych mi pomohl sledovat kontext I ' pracuji.

Odpověď

Bash má háček precommand . Něco takového.

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 

Komentáře

  • Gilles: Vložil jsem výše uvedené do terminálu konsole a výstup z každého příkazu, který jsem následně zadal, byl vymazán, než jsem to mohl přečíst. Chybí mi něco? Co se stane s tímto (a další odpovědí níže), pokud vyvolám víceřádkový bash skript kde více než jeden řádek (nebo jakýkoli jiný řádek než poslední) generuje inter vytváření výstupu?
  • @Joe To by mělo vymazat obrazovku po stisknutí Enter před provedením příkazu. Funguje to takhle pro mě. Hák preexec je spuštěn pro každý interaktivní příkaz, nezáleží na tom, ' zda je příkaz vestavěný nebo externí nebo mnoho příkazů.
  • @ Joe, musíte přidat tento řádek níže, nedělejte nic, pokud je úplný [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; problém je v tom, že PROMPT_COMMAND je spuštěn a také uvězněn po samotném příkazu; Také mi může někdo říct, proč je local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; tady?
  • @JamesAndino history -1 vytiskne poslední příkazový řádek s číslo historie vpředu. Filtr sed odstraní číslo historie.
  • @JamesAndino Díky tomu to fungovalo (a já vidím, že Giles to přidal ke své odpovědi.)

odpověď

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

Poté pokaždé stisknete návrat namísto pouhého psaní \n přesune se na začátek řádku, zadá text clear;, poté se přesune na konec a zadá \n jak se očekávalo.

Komentáře

  • Nový řádek způsobí, že se výzva přesto vytiskne, takže vložením příkazu clear do výzvy se dosáhne stejné věci bez znečištění historie příkazů příkazy clear.
  • @ jw013 Rozdíl je v tom, že v mém případě clear se provede před tím, než příkaz a výstup příkazu nezmizí ' t. V případě, že se to však zobrazí,
  • Přeji si, aby existoval nějaký způsob, jak to provést, aniž byste museli upravovat samotný příkazový řádek – jsem si ' jistý, že by to bylo zajímavým způsobem rozbíjet složité nebo víceřádkové příkazy, ale ' nenajdu lepší způsob, jak to udělat.
  • @ jw013, máte pravdu, je to zlomí se u více řádků. Vloží clear; do výstupu pro každý další \n.
  • tento tip je velmi dobrá dávka !! Potřeboval jsem vázat nějaký konkrétní kód na F2, ale někdy má řádek nějaký příkaz, který jsem zadal, ale nebyl proveden, takže s tímto příkladem: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"" se přesune na začátek, zadejte ls;# komentovat, co tam bylo, a spustit příkaz ls správně! thx!

Odpověď

z otázky, kterou jsem dnes položil (s uznáním pro uživatele @aecolley“ s odpovědí ):

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

\C-m simulující klíč „Enter“, \C-l simulující Ctrl+l tak, jak je to jasné, a \C-j je „newline-and-indent“, takže příkaz je závazný Zadejte klávesu Ctrl + l & Ctrl + j

, která funguje na GNU bash, verze 3.2.53 (1) -release (x86_64-apple-darwin14) a další odpovědi v tomto vlákně ne. také to neznečišťuje historii příkazy „clear“ u všech ostatních příkazů.

Komentáře

  • poznámka: pokud používáte přes ssh, musíte jej spustit v tomto prostředí, jinak dojde k podivnosti.
  • funguje na mém terminálu ubuntu 16.04, díky, ale jak to funguje, můžete prosím uvést odkaz nebo nějakou dokumentaci?

Odpověď

Zúčtování zvažte pouze tehdy, když chcete

cb4() { preexec () { clear } } 

Používá se háček s názvem preexec, potvrzeno funguje i se zsh

Poté bude každá relace, kterou chcete automaticky vymazat, před každým spuštěným příkazem : cb4

Pokud jste si jistí, vždy chcete vymazat v každém kontextu

preexec () { clear } 

A pokud opravdu chcete resetovat terminál

nahraďte slovo clear slovem tput reset

tput je volitelný, ale urychluje proces resetování

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *