猫ほど歴史的なものがあるでしょうか?

猫ほど歴史的なものがあるでしょうか?

これは繰り返し動作するプログラムに関するものです。標準入力から入力を受け取り、結果を標準出力に渡します。プログラムに渡す必要がある既知のテキストセットがあり、それをファイルに入れましたbegin.txt。したがって、パイプラインを設定できます。

cat begin.txt - | myprogram

問題は後で発生します。すでに入力した内容(少し変更した内容)を送信しようとすると、履歴がないため矢印が機能しません。cat

  1. それで、各ラインの歴史を保存できるものを探しています。

vim最初はを使ってみましたが、:.! myprogramアイテム(配信されたテキスト)を実行した後に終了し、myprogramその状態が失われました。テキスト/コマンドが渡されるまでプログラムを実行し続ける方法が必要です。

  1. vimパイプラインでフィルタとして機能する連続的な方法で動作することは可能ですか?

答え1

使用rlwrap。このrlwrapユーティリティは、ReadLineの履歴(およびプロンプトで慣れているものなどの一部のReadLine編集機能bash)を取得するために使用するすべてのユーティリティをラップします。以下のファイルに履歴を保存します$RLWRAP_HOME(または$HOME変数が設定されていない場合)。

それでrlwrapあなたはそれを行うことができます

rlwrap cat begin.txt - | myprogram

次にこのプログラムを実行すると、Up-arrowキーストロークを使用してDown-arrowスクロールできるデフォルトの履歴が生成されます。記録は基本的に~/.cat_history

詳しくは、rlwrap()のマニュアルを参照してください。man rlwrap

答え2

cat begin.txt - << EOF
Type the 
text you want
here, terminated by a line with only
EOF

バラよりhttps://stackoverflow.com/q/2500436動作方法の詳細。

この間に入力した内容はすべてbash履歴に保存され、必要に応じて編集できます。

もっと柔軟なものが必要な場合は、一時ファイルを作成して編集してみてはいかがでしょうか?

cat begin.txt > /tmp/myprograminput
editor /tmp/myprograminput
cat /tmp/myprograminput | myprogram

関連情報