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 celocal 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 începutls;#
comentând ce era acolo și executați corect comandals
! 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