あとでEOFを引き起こすことなくプロセスの標準入力にデータをパイプする


33

ユーザーインタラクティブシェルを起動する実行可能ファイルがあります。シェルの起動時に、最初にいくつかのコマンドを挿入してから、ユーザーにインタラクティブセッションを許可します。私はこれを簡単に使用できますecho

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

これはほとんど機能します。問題は、コマンドのエコーが完了すると、プロセスのstdinにフィードしているエコーコマンドがEOFに達することです。このEOFにより、シェルはすぐに終了します(シェルでCtrl + Dを押したかのように)。

後でEOFを発生させずにこれらのコマンドをstdinに注入する方法はありますか?


./shell_executableコマンドのリストの最後に追加しようとしましたか?2つの実行中のインスタンス(親と子)がありますが、それでうまくいくかもしれません。
goldilocks

回答:


40

stackoverflowの同様の質問でこの賢い答えを見つけました

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

これがトリックです。shell_executableの入力ストリームにcat出力をecho送り込み、EOFまでさらに入力を待ちます。


@ jw013そのとおりです。投稿を編集しました。ありがとう。私はW / O実験した場合には、括弧は、私が見たcmd 1書き戻されますが、それはによって生成されたO / Pされている必要があることを認識していなかったcmd 1
Gowtham

これは素晴らしいです!あなたは私に多くの時間を節約しました。ありがとうございました!!
jaggedsoft

22

これを行うにはクリーンな方法のようなものを探すために、おそらくあるbash--rcfileオプション。カスタムファイルにカスタムコマンドを入れて、起動時に実行するためにインタラクティブシェルに渡します。

そのようなオプションが存在しない場合は、次を試すこともできます。

cat custom_commands_file - | ./shell_executable

cat-標準入力として解釈されます。


非常に良い解決策💪😠
dctremblay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.