Kan jag konfigurera bash så att “ rensas ” före varje kommando som skrivs i konsolen?

Jag vill konfigurera bash för att utföra clear kommando varje gång jag skriver något kommando i terminalen (före kör mitt kommando). Hur kan jag göra det?

Jag använder Debian Linux.

Kommentarer

  • Du hittar den här tråden användbar.
  • Bara nyfiken: Vad ' ansöker du om detta? Förutom när jag ' m felsökningsprogram med mycket utdata, jag vill vanligtvis hålla så mycket som möjligt på skärmen för att hjälpa mig att hålla reda på sammanhanget jag ' jag arbetar.

Svar

Bash har en förkommandokrok . Sort.

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 

Kommentarer

  • Gilles: Jag klistrade in ovan i en konsole-terminal och utmatningen från varje kommando som jag därefter angav rensades innan jag kunde läsa det. Saknar jag något? Vad händer också med detta (och det andra svaret nedan) om jag åberopar ett baslinje med flera rader där mer än en rad (eller någon annan rad än den sista) genererar inter esting output?
  • @Joe Detta bör rensa skärmen när du trycker på Enter innan du kör kommandot. Det fungerar så här för mig. Preexec-kroken körs för varje interaktivt kommando, det spelar ingen roll ' om kommandot är ett inbyggt eller externt kommando eller många kommandon.
  • @ Joe du måste lägga till den här raden nedan, gör ingenting om det är fullständigt [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return; problemet är att PROMPT_COMMAND körs och också fångas efter det faktiska kommandot; Kan någon berätta för mig varför local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; är här?
  • @JamesAndino history -1 skriver ut den sista kommandoraden, med ett historiknummer framför. Sed-filtret tar bort historiknumret.
  • @JamesAndino Det fick det att fungera (och jag ser att Giles lade till det i sitt svar.)

Svar

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

Därefter trycker du tillbaka istället för att bara skriva \n den flyttar till början av raden, matar in texten clear;, flyttar sedan till slutet och anger \n som förväntat.

Kommentarer

  • En ny rad gör att uppmaningen skrivs ut hur som helst, så att sätta rensningen i prompten åstadkommer samma sak utan att förorena kommandot historik med clear kommandon.
  • @ jw013 Skillnaden är att i mitt fall clear körs innan kommandot och kommandoutgången försvinner inte '. I fallet med snabb gör det det.
  • Jag önskar att det fanns något sätt att göra detta utan att behöva ändra själva kommandoraden – jag ' är säker på att detta skulle bryta på intressanta sätt på komplexa eller flerradiga kommandon men jag kan ' t hitta något bättre sätt att göra detta.
  • @ jw013, du har rätt, det bryts för flera rader .. Den infogar clear; till utgången för varje extra \n.
  • detta tips är mycket bra thx !! Jag behövde binda någon specifik kod till F2, men vissa gånger har raden ett kommando som jag skrev men inte körde, så med det här ex .: bind "\"\\eOQ\":\"\e[1~ls;#\\n\"" kommer det att flytta till början, skriv ls;# kommentera vad som fanns där och kör ls -kommandot ordentligt! thx!

Svar

från en fråga jag ställde idag (med kredit till användaren @aecolley” svar ):

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

\C-m simulering ”Enter” -tangenten, \C-l simulerar Ctrl+l eftersom det är klart och \C-j är ”newline-and-indent”, så kommandot är bindande Enter-tangent till Ctrl + l & Ctrl + j

som fungerar på GNU bash, version 3.2.53 (1) -release (x86_64-apple-darwin14) och de andra svaren på den här tråden inte. detta förorenar inte historik med ”rensa” kommandon vartannat kommando.

Kommentarer

  • anmärkning: om du använder över ssh måste du köra det i den omgivningen eller om det blir konstigt.
  • fett fungerar på min ubuntu 16.04 terminal, tack men hur fungerar det, kan du ge en länk eller lite dokumentation tack?

Svar

Överväg bara att rensa när du vill

cb4() { preexec () { clear } } 

Den här använder en krok som heter preexec, bekräftat fungerar också med zsh

Sedan kommer varje session du vill radera automatiskt före varje kommando du kör : cb4

Om du är säker vill du alltid rensa i alla sammanhang

preexec () { clear } 

Och a om du faktiskt vill återställa terminalen

ersätt ordet clear med tput reset

tput är valfritt men påskyndar återställningsprocessen

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *