Vorrei configurare bash per eseguire il clear
comando ogni volta che digito un comando nel terminale (prima di eseguire il mio comando). Come lo posso fare?
Sto usando Debian Linux.
Vorrei configurare bash per eseguire il clear
comando ogni volta che digito un comando nel terminale (prima di eseguire il mio comando). Come lo posso fare?
Sto usando Debian Linux.
Risposte:
Bash ha un gancio di comando preliminare . Una specie di.
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
Enter
, prima di eseguire il comando. Funziona così per me. L'hook preexec viene eseguito per ogni comando interattivo, non importa se il comando è un comando incorporato o esterno o molti comandi.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
il problema è che PROMPT_COMMAND è in esecuzione e intrappolato anche dopo il comando effettivo; Inoltre qualcuno può dirmi perché local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
è qui?
history -1
stampa l'ultima riga di comando, con un numero di cronologia in primo piano. Il filtro sed rimuove il numero di cronologia.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Dopodiché ogni volta che premi returninvece di scrivere semplicemente \n
si sposta all'inizio della riga, inserisci il testo clear;
, quindi passa alla fine e inserisci \n
come previsto.
clear
comandi con i comandi.
clear
viene eseguito prima che il comando e l'output del comando non scompaiano. Tuttavia, nel caso con prompt, lo fa.
clear;
nell'output per ogni extra \n
.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
si sposterà all'inizio, scrivendo ls;#
commentando cosa c'era ed eseguendo il ls
comando correttamente! grazie!
da una domanda che ho posto oggi (con il merito alla risposta dell'utente @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
La \C-m
simulazione del tasto "Invio", la \C-l
simulazione in Ctrl+l
quanto è chiara e \C-j
è "newline-and-indent", quindi il comando è vincolante Tasto Invio a Ctrl + l & Ctrl + j
che funziona su GNU bash, versione 3.2.53 (1) -release (x86_64-apple-darwin14) e le altre risposte su questo thread no. inoltre, questo non inquina la cronologia con i comandi 'clear' di ogni altro comando.
cb4() {
preexec () {
clear
}
}
Questo utilizza un hook chiamato preexec
, confermato funziona anche con zsh
Quindi qualsiasi sessione che desideri cancellare automaticamente prima di ogni comando che esegui: cb4
preexec () {
clear
}
sostituire la parola clear
contput reset
tput
è facoltativo ma accelera il processo di ripristino