これは繰り返し動作するプログラムに関するものです。標準入力から入力を受け取り、結果を標準出力に渡します。プログラムに渡す必要がある既知のテキストセットがあり、それをファイルに入れましたbegin.txt
。したがって、パイプラインを設定できます。
cat begin.txt - | myprogram
問題は後で発生します。すでに入力した内容(少し変更した内容)を送信しようとすると、履歴がないため矢印が機能しません。cat
- それで、各ラインの歴史を保存できるものを探しています。
vim
最初はを使ってみましたが、:.! myprogram
アイテム(配信されたテキスト)を実行した後に終了し、myprogram
その状態が失われました。テキスト/コマンドが渡されるまでプログラムを実行し続ける方法が必要です。
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