パイプ/ファイルを介して部分データを送信し、インタラクティブにどのように送信できますか?

パイプ/ファイルを介して部分データを送信し、インタラクティブにどのように送信できますか?

実行したいコマンドがあります。これをと呼びますprogram。 bashやPython REPLに似た対話型プログラムです。

事前定義された入力を使用してこのプログラムを起動したいと思います。私は努力したprogram << "some_commands"。ただし、実行が完了した後はsome_commands手動の対話を続行できません。

このプログラムがbashなら、私は.bashrcこの目的でそれを使うでしょう。

事前定義された開始入力を持つプログラムを使用する正しい方法は何ですか?

答え1

Expectを使用せずにこれを行うことができます。

{ echo foo ; cat ; } | command

答え2

expect作業のためのツールは次のとおりです。

#!/usr/bin/expect -f
spawn program
expect "I'm ready for input"
send "command 1\r"
expect "I'm ready for input"
send "command 2\r"
# ...
send "command last\r"
interact

このinteractコマンドはユーザーに制御権を返します。

答え3

あなたはそれを使用することができます巻き戻すプログラムと対話します。 Rlwrapは、bashで使用されているのと同じreadlineライブラリに基づいて行エディタを提供します。これは通常、これを提供するプログラムの行エディタほど良くありませんが(たとえば、構文の色付けや完成は提供されていません)、バックスペースキーのみを理解する基本的な端末インターフェイスよりはるかに優れています。

rlwrap -P 'some_commands' program

テキストは入力バッファに渡されますがプログラムには渡されないため、プログラムを起動Enterしてからキーを押す必要があります。全文が単一の文字列として渡されます。改行文字を含めることができます。

関連情報