web-dev-qa-db-ja.com

後にEOFを引き起こさずにプロセスのstdinにデータをパイプする

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

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

これはほぼで機能します。問題は、プロセスの標準入力を提供しているechoコマンドがEOF一度、コマンドのエコーを完了すると、このEOF=がシェルを終了させることです。シェルでCtrl + Dを押した場合)。

後でEOFを引き起こさずにこれらのコマンドをstdinに挿入する方法はありますか?

33
Jason R

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

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

これでうまくいきます。 catは、echoの出力をShell_executableの入力ストリームに送り込み、EOFになるまでさらに入力を待ちます。

40
Gowtham

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

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

cat custom_commands_file - | ./Shell_executable

cat-をstdinとして解釈します。

22
jw013