Je voudrais configurer bash pour exécuter la clear
commande chaque fois que je tape une commande dans le terminal (avant d'exécuter ma commande). Comment puis je faire ça?
J'utilise Debian Linux.
Je voudrais configurer bash pour exécuter la clear
commande chaque fois que je tape une commande dans le terminal (avant d'exécuter ma commande). Comment puis je faire ça?
J'utilise Debian Linux.
Réponses:
Bash a un crochet de précommande . Sorte 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
Enter
, avant d'exécuter la commande. Cela fonctionne comme ça pour moi. Le hook preexec est exécuté pour chaque commande interactive, peu importe si la commande est une commande intégrée ou externe ou plusieurs commandes.
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
le problème est que PROMPT_COMMAND est en cours d'exécution et également piégé après la commande réelle; Quelqu'un peut-il aussi me dire pourquoi local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
est ici?
history -1
imprime la dernière ligne de commande, avec un numéro d'historique devant. Le filtre sed supprime le numéro d'historique.
bind 'RETURN: "\e[1~clear; \e[4~\n"'
Après cela, chaque fois que vous appuyez sur returnau lieu de simplement écrire, \n
il se déplace au début de la ligne, saisit le texte clear;
, puis se déplace à la fin et entre \n
comme prévu.
clear
commandes avec des commandes.
clear
est exécuté avant que la commande et la sortie de commande ne disparaissent. Cependant, dans le cas où avec invite, c'est le cas.
clear;
à la sortie pour chaque extra \n
.
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
elle se déplacera au début, tapez ls;#
commentant ce qui était là et exécutera la ls
commande correctement! THX!
à partir d'une question que j'ai posée aujourd'hui (avec crédit à la réponse de l'utilisateur @ aecolley ):
bind '"\C-m": "\C-l\C-j"'
La \C-m
simulation de la touche «Entrée», la \C-l
simulation Ctrl+l
telle qu'elle est claire et la \C-j
«nouvelle ligne et le retrait», de sorte que la commande lie la touche Entrée à Ctrl + l et Ctrl + j
cela fonctionne sur GNU bash, version 3.2.53 (1) -release (x86_64-apple-darwin14) et les autres réponses sur ce fil ne le font pas. cela ne pollue pas non plus l'historique avec des commandes «clear» toutes les autres commandes.
cb4() {
preexec () {
clear
}
}
Cela utilise un hook appelé preexec
, fonctionne également avec zsh
Ensuite, toute session que vous souhaitez effacer automatiquement avant chaque commande que vous exécutez: cb4
preexec () {
clear
}
remplacer le mot clear
partput reset
tput
est facultatif mais accélère le processus de réinitialisation