Pot configura bash pentru a executa “ clear ” înainte de fiecare comandă tastată în consolă?

Aș dori să configurez bash pentru a executa comanda clear de fiecare dată când scriu o comandă în terminal (înainte executând comanda mea). Cum pot face asta?

Folosesc Debian Linux.

Comentarii

  • Găsiți acest fir util.
  • Pur și simplu curios: ce ' solicitați pentru aceasta? Cu excepția cazului în care ' m programe de depanare cu o mulțime de ieșiri, de obicei vreau să păstrez cât mai mult pe ecran pentru a mă ajuta să urmăresc contextul I ' Lucrez în.

Răspuns

Bash are un cârlig precomand . Un fel de.

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 

Comentarii

  • Gilles: Am lipit cele de mai sus într-un terminal konsole și ieșirea din fiecare comandă pe care am introdus-o ulterior a fost ștearsă înainte să o pot citi. Îmi lipsește ceva? unde mai multe linii (sau orice altă linie decât ultima) generează inter ieșire estimată?
  • @Joe Aceasta ar trebui să șteargă ecranul după ce apăsați Enter, înainte de a executa comanda. Funcționează așa pentru mine. Cârligul preexec este executat pentru fiecare comandă interactivă, nu contează ' dacă comanda este o comandă încorporată sau externă sau mai multe comenzi.
  • @ Joe, trebuie să adăugați această linie de mai jos, nu faceți nimic dacă este complet [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; problema este că PROMPT_COMMAND este rulat și, de asemenea, blocat după comanda reală; De asemenea, cineva îmi poate spune de ce local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; este aici?
  • @JamesAndino history -1 tipărește ultima linie de comandă, cu un număr istoric în față. Filtrul sed elimină numărul istoricului.
  • @JamesAndino Acest lucru a făcut să funcționeze (și văd că Giles l-a adăugat la răspunsul său.)

Răspuns

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

După aceea, de fiecare dată când apăsați return în loc să scrieți doar \n se va muta la începutul liniei, introduceți textul clear;, apoi mutați la final și introduceți \n așa cum era de așteptat.

Comentarii

  • O linie nouă determină imprimarea oricând a promptului, așa că introducerea clarului în prompt realizează același lucru fără poluarea istoricului comenzilor cu comenzi clear.
  • @ jw013 Diferența este că în cazul meu clear este executat înainte ca ieșirea comenzii și a comenzii să nu dispară '. Cu toate acestea, în cazul în care promptul se întâmplă.
  • Aș dori să existe o modalitate de a face acest lucru fără a fi nevoie să modificați linia de comandă în sine – Sunt ' sigur că acest lucru ar fi rupeți în moduri interesante la comenzile complexe sau multi-linie, dar nu pot ' să găsesc nici o modalitate mai bună de a face acest lucru.
  • @ jw013, aveți dreptate, se întrerupe pentru mai multe linii .. Se inserează clear; la ieșire pentru fiecare \n suplimentar.
  • acest sfat este foarte bun thx !! Trebuia să leg un anumit cod la F2, dar uneori linia are o comandă pe care am tastat-o, dar nu am executat-o, deci cu acest ex .: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"" se va muta la început ls;# comentând ce era acolo și executați corect comanda ls! thx!

Răspuns

dintr-o întrebare pe care am pus-o astăzi (cu credit utilizatorului @aecolley ):

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

Simularea \C-m tasta „Enter”, \C-l simulând Ctrl+l așa cum este clar și \C-j este „newline-and-indent”, deci comanda este obligatorie Enter cheie la Ctrl + l & Ctrl + j

care funcționează pe GNU bash, versiune 3.2.53 (1) -release (x86_64-apple-darwin14) și celelalte răspunsuri de pe acest thread nu. de asemenea, acest lucru nu poluează istoricul cu comenzi „clare” fiecare altă comandă.

Comentarii

  • notă: dacă folosiți peste ssh, trebuie să-l executați în acel mediu sau să se întâmple ciudățenie.
  • funcționează pe terminalul meu Ubuntu 16.04, mulțumesc, dar cum funcționează, ați putea furniza un link sau o documentație, vă rog?

Răspuns

Luați în considerare compensarea numai atunci când doriți să

cb4() { preexec () { clear } } 

Acesta folosește un cârlig numit preexec, confirmat funcționează și cu zsh

Apoi orice sesiune pe care doriți să o ștergeți automat înainte de fiecare comandă pe care o executați : cb4

Dacă sunteți sigur că doriți întotdeauna să ștergeți în fiecare context

preexec () { clear } 

Și a dacă doriți efectiv să resetați terminalul

înlocuiți cuvântul clear cu tput reset

tput este opțional, dar accelerează procesul de resetare

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *