必要な場合にのみ削除を検討してください。

必要な場合にのみ削除を検討してください。

clear端末に特定のコマンドを入力するたびに(実行する前に)、特定のコマンドを実行するようにbashを設定したいと思います。どうすればいいですか?

私はDebian Linuxを使用しています。

答え1

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

答え2

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

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

答え3

今日私が尋ねた質問から(ユーザーにクレジットを提供します。@aecolleyの返信):

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

\C-m「Enter」キーをシミュレートします。明らかに\C-lシミュレートされるのは「改行とインデント」なので、このコマンドはEnterキーをCtrl + l&Ctrl + jにバインドします。Ctrl+l\C-j

GNU bashバージョン3.2.53(1)-リリース(x86_64-apple-darwin14)で動作しますが、このスレッドの他の答えは機能しません。また、他のコマンドと同様に、「clear」コマンドで履歴を汚染することはありません。

答え4

必要な場合にのみ削除を検討してください。

cb4() {
  preexec () {
    clear
  }
}

これはというフックを使用し、preexeczshでも動作することが確認されました。

その後、各コマンドを実行する前にすべてのセッションを自動的に消去したいと思います。cb4

すべての状況で常に消去したいと確信している場合

preexec () {
  clear
}

本当に端末をリセットしたい場合

単語をclear次に置き換えます。tput reset

tputオプションですが、リセット処理を高速化できます。

関連情報