入力を使用してNohupコマンドを実行する


11

UNIXでは、nohupを使用して実行したいプロセスがあります。ただし、このプロセスは、ある時点で、入力するyes必要があるプロンプトで、またはno続行するために待機します。これまでのところ、UNIXでは次のことを行っています。

nohup myprocess <<EOF
y
EOF

そのため、nohupを使用してプロセス 'myprocess'を開始し、 'y'を使用してファイルをパイプし、ファイルを閉じます。上記の行は、実質的に3つの別々のコマンドです。つまり、UNIXの最初の行でEnterキーを押してから、「y」と入力してEnterキーを押し、最後に「EOF」と入力してReturnキーをもう一度押します。だからこれは完璧に動作しますが、私の問題は以下です。

これをPerlで実行したいのですが、3行以上あるため、このコマンドを実行する方法がわかりません。以下が機能するかどうかはわかりません:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`

これは、質問に記載されている

@hop何を言っているのか本当にわからない。最初の編集で改行が追加され、シェルのパーツが適切に表示されるようにコードとしてフォーマットされた。私はほとんど何も変更していません。元のリビジョンはここに
Michael Mrozek

@マイケル:あなたは正しい、ごめんなさい。私はdiffを誤って解釈し、バッククォートを追加しました。質問をさらに無意味なものにします。与えられた例はうまくいくはずです。

@hop perl one?私はperlがわからないので試してみないとうまくいかないと思いましたが、彼が「以下がうまくいくかどうかはわからない」と言ったのではないでしょうか。おそらく、与えられた例がうまくいくと答えるだけです
マイケル・ムロゼック

回答:


19

yプロセスのstdinにシングルを書き込みたいだけなら、これを行うことができます:

(echo y | nohup myprocess) &

表示さyれるすべてのプロンプトに対して書き込みを続けたい場合、coreutil yesはまさにこの目的のために存在します。つまり、stdoutに指示したものは何でも書き込み続けます。デフォルトでは "y"が出力されるため、次のことができます。

(yes | nohup myprocess) &

しかし、何か他のものが必要な場合は、それを引数として渡すことができます


1:私は見ていないyes長い年月で使用
MSW

マイケル、早速の返信ありがとうございます。しかし、私は私がプロセスにYをエコーするというあなたの提案を試したと思います。私がこれを行ったとき、&が私の中にあることを確認したにもかかわらず、出力は常に私の端末に溢れます

&は、プロセス出力がコンソールに書き込まれるのを防ぎません。バックグラウンドで開始するだけです。
fschmitt

これは質問とどのように関係していますか?

@Riccardo私は少し実験しました、そしてあなたは正しいと思います。修正、ありがとう
Michael Mrozek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.