ターミナルでコマンドを入力するたびにclear
コマンドを実行するようにbashを構成したい(前私のコマンドを実行します)。どうすればよいですか?
DebianLinuxを使用しています。
コメント
- このスレッドは便利です。
- 興味があります:これを申請する'は何ですか?'出力の多いプログラムをデバッグする場合、通常、コンテキストを追跡できるように、画面上にできるだけ多くの情報を表示したいと思います。' m作業中です。
回答
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
コメント
- Gilles:貼り付けました上記をコンソール端末に入力すると、後で入力した各コマンドの出力がクリアされてから読み取れます。何かが足りないのでしょうか?また、複数行のbashスクリプトを呼び出すと、これ(および以下の他の回答)はどうなりますか?複数の行(または最後の行以外の行)がinterを生成する場合出力を推定しますか?
- @Joeこれにより、
Enter
を押した後、コマンドを実行する前に画面がクリアされます。私にとってはこのように機能します。 preexecフックは、対話型コマンドごとに実行されます。'コマンドが組み込みコマンドであるか、外部コマンドであるか、多数のコマンドであるかは関係ありません。 - @
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
が完了すると、次の行を追加する必要があります。問題は、PROMPT_COMMANDが実行されており、実際のコマンドの後にトラップされていることです。また、local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
がここにある理由を教えてもらえますか? - @JamesAndino
history -1
は、最後のコマンドラインを次のように出力します。前の履歴番号。 sedフィルターは履歴番号を取り除きます。 - @JamesAndinoそれで機能しました(そしてGilesが彼の回答に追加したようです)。
回答
bind "RETURN: "\e[1~clear; \e[4~\n""
その後は、iv id = “と書くだけでなく、 return を押すたびにad85e79e41 “>
行の先頭に移動し、テキストclear;
を入力してから、末尾に移動して\n
予想どおり。
コメント
- 改行するとプロンプトが出力されるため、プロンプトにクリアを入力しても同じことが行われます
clear
コマンドでコマンド履歴を汚染することなく。 - @ jw013違いは、私の場合は
clear
はコマンドの前に実行され、コマンド出力は'消えません。ただし、プロンプトが表示された場合はそうなります。 - コマンドライン自体を変更せずにこれを実行する方法があればいいのですが。'複雑なコマンドや複数行のコマンドで面白い方法で中断しますが、'これを行うためのより良い方法を見つけることができません。
- @ jw013、その通りです。複数行の場合は中断します。追加の
\n
ごとにclear;
を出力に挿入します。 - このヒントとても良いthxです!特定のコードをF2にバインドする必要がありましたが、入力したコマンドが実行されていない場合があるため、次の例では、
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
と入力すると、先頭に移動します。ls;#
そこにあったものにコメントし、ls
コマンドを正しく実行してください。 thx!
回答
今日尋ねた質問から(ユーザー @aecolley”の回答):
bind ""\C-m": "\C-l\C-j""
\C-m
のシミュレーション「Enter」キー、\C-l
がクリアでCtrl+l
をシミュレートし、\C-j
は「改行とインデント」であるため、コマンドはEnterキーをCtrl + lにバインドします& Ctrl + j
GNUbashバージョンで動作します3.2.53(1)-リリース(x86_64-apple-darwin14)およびこのスレッドの他の回答はそうではありません。また、これは他のすべてのコマンドの「クリア」コマンドで履歴を汚染しません。
コメント
- 注:over sshを使用する場合は、その環境で実行する必要があります。そうしないと、奇妙なことが起こります。
- すばらしい私のubuntu16.04ターミナルで動作しますが、どのように動作しますか?リンクまたはドキュメントを提供していただけますか?
回答
必要な場合にのみクリアすることを検討してください
cb4() { preexec () { clear } }
これはpreexec
と呼ばれるフックを使用します。確認済みはzshでも機能します
次に、実行するすべてのコマンドの前に自動的にクリアするセッション :cb4
すべてのコンテキストで常にクリアしたい場合は、
preexec () { clear }
そして、実際に端末をリセットしたい場合
単語clear
をtput reset
に置き換えます
tput
はオプションですが、リセットプロセスを高速化します