Vorrei configurare bash per eseguire il clearcomando 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 clearcomando 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 -1stampa 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 \nsi sposta all'inizio della riga, inserisci il testo clear;, quindi passa alla fine e inserisci \ncome previsto.
clearcomandi con i comandi.
clearviene 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 lscomando 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-msimulazione del tasto "Invio", la \C-lsimulazione in Ctrl+lquanto è 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 clearcontput reset
tput è facoltativo ma accelera il processo di ripristino