編集する:@JdeBPのコメントに基づいて、対話型端末のコマンド履歴と通話履歴機能が異なる2つであることを理解しています。しかし、GNU readline履歴呼び出し関数が画面にどのように印刷されるかはまだ疑問に思っています。
私はbashコマンドが以前のコマンドをターミナルウィンドウに印刷する。別の問題(協会)今、私は正確にどのように動作するのだろうかと思います。history
ために使用されていないことに気づきましたstdout
コマンドを入力してEnterキーを押すと、上矢印を使用して前のコマンドに移動できます。ただし、前のコマンドは経由で送信されませんでしたstdout
。これは、すべてをstdout
画面に印刷する前に出力を変更するコプロセスにリダイレクトすることで確認できます。以下のスクリプトがまさにそのことをします。入力した内容をエコーするだけでなく、事前にstdout
コマンドにリダイレクトすることもあります。sed
exec 4>&1
coproc out (sed 's/^/PREFIX /' >&4)
exec 1>&${out[1]}
while read -e x; do
echo $x
done
このスクリプトが実行されると、入力した内容はすべて「PREFIX」プレフィックスで印刷されます。ただし、上矢印を使用して前のコマンドにアクセスすると、「PREFIX」は先頭には付けられません。
なぜこれですか? GNU履歴呼び出しは、どのように履歴ファイルのテキストを端末画面に配置しますか?使用しない場合はstdout
使用しますかstderr
、それとも別のものを使用しますか?同じ方法でリダイレクトしようとしましたが、stderr
テキストが端末画面に表示されず、上下の矢印が何も印刷されませんでした。だから確認できません。私はこれがこの歴史的機能を表すことができると思います。はい使ったけどstderr
確認したかったです。