実行するには、Nohupコマンドを入力してください。

実行するには、Nohupコマンドを入力してください。

UNIXではnohupを使ってプロセスを実行したいと思います。ただし、このプロセスはメッセージが表示されるのを待つことがあるため、そのプロセスに入るか続行するのをyes待つno必要があります。これまでUNIXでは、次のことを行いました。

nohup myprocess <<EOF
y
EOF

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

このコマンドをPerlで実行したいのですが、3行以上なので、どうすればいいかわかりません。次がうまくいくかわかりません。

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

答え1

yプロセスの標準入力への単一の書き込みのみが必要な場合は、次のことができます。

(echo y | nohup myprocess) &

y表示されるすべてのプロンプトに対して何度も書きたい場合は、coreutilはyesまさにその目的のために存在します。つまり、ユーザーが話している内容を標準出力に記録し続けます。デフォルトは「y」を出力することなので、次のことができます。

(yes | nohup myprocess) &

ただし、他のものが必要な場合はパラメータとして渡すことができます。

関連情報