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
}
}
これはというフックを使用し、preexec
zshでも動作することが確認されました。
その後、各コマンドを実行する前にすべてのセッションを自動的に消去したいと思います。cb4
すべての状況で常に消去したいと確信している場合
preexec () {
clear
}
本当に端末をリセットしたい場合
単語をclear
次に置き換えます。tput reset
tput
オプションですが、リセット処理を高速化できます。