web-dev-qa-db-ja.com

コンソールに入力するすべてのコマンドの前に「クリア」を実行するようにbashを構成できますか?

(コマンドを実行する前に)端末でコマンドを入力するたびにclearコマンドを実行するようにbashを構成したいと思います。どうやってやるの?

Debian Linuxを使用しています。

23
syntagma

Bashにはプリコマンドフックがあります 。ちょっと。

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
bind 'RETURN: "\e[1~clear; \e[4~\n"'

その後、押すたびに return\nと書くだけでなく、行の先頭に移動し、テキストclear;を入力してから、最後に移動して\nを期待どおりに入力します。

6
rush

私が今日尋ねた質問から(ユーザーへのクレジット付き @ aecolley's answer ):

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

\C-m「Enter」キーのシミュレーション、\C-lシミュレーションCtrl+l明確であり、\C-jは「改行とインデント」であるため、コマンドはEnterキーをCtrl + lとCtrl + jにバインドしています。

GNU bash、バージョン3.2.53(1)-release(x86_64-Apple-darwin14))で機能し、このスレッドの他の回答では機能しません。また、これは 'で履歴を汚染しません他のすべてのコマンドをクリアします。

2
TRB

あなたがしたいときにのみクリアを検討してください

cb4() {
  preexec () {
    clear
  }
}

これはpreexecと呼ばれるフックを使用し、zshでも動作することが確認されています

次に、実行するすべてのコマンドの前に自動的にクリアするセッション:cb4

あなたが確信している場合は、常にあらゆる状況でクリアしたい

preexec () {
  clear
}

そして実際に端末をリセットしたい場合

word cleartput resetに置き換えます

tputはオプションですが、リセットプロセスを高速化します

0
jasonleonhard