web-dev-qa-db-ja.com

バックグラウンドでPerlスクリプトを実行する方法

私はubuntuの新しいユーザーです...

最後に&と置くと、アプリケーションがバックグラウンドに置かれますが、実際にはそうではありませんが、バックグラウンドで実行されていても、コマンドラインでPerlスクリプトの出力が得られます。そのため、完全なスクリプトが完了するまで待たなければならないため、役に立たなくなります。

好む :

output of Perl..
..
..
Done.

したがって、Perlスクリプトが実行されるまで待機する必要がありますが、このようなタイプのスクリプトをバックグラウンドで実行して待機する必要がないようにする方法はありますか?

私はすでに以下を試しました:

command > test.txt //This generated emptyfile test.txt and all the output is still on command line instead of test.txt
command > /dev/null
command < /dev/null

それらのどれも成功していません。

CTRL + SHIFT + TまたはCTRL + ALT + Tを実行して、新しいコマンドラインコンソールを開くことをお勧めしないでください。これを行いたくないので、作業中にPerlスクリプトをバックグラウンドで実行します。

他のPerlスクリプトについては、&は正常に機能していますが、このスクリプトについてはそうではありません。回避策はありますか?

編集:John1024とVolker Siegelのおかげで解決策を得ました。

コマンド2>/dev/null&

1
user1735921

コマンドは、stdoutまたはstderrに出力を生成できます。試行したコマンドは、stdoutのみをリダイレクトしました。 bashの下で、次を使用して両方のストリームからの出力を一度にリダイレクトできます。

command &>test.txt &

または

command &>/dev/null &

POSIXシェルを使用している場合、次の手順でリダイレクトを行う必要があります。

command >test.txt 2>&1 &

>test.txtは、stdoutをファイルtest.txtにリダイレクトします。 stderrはファイルハンドル2であるため、2>&1の効果は、stderrを&1で示されているstdoutにリダイレクトすることです。

2
John1024

出力はエラーストリームstderrに送られるように見えるため、stdoutの代わりにリダイレクトします。

command 2> errors.txt

または、両方を同じファイルにリダイレクトします。

command > errors.txt 2>&1

すべてを知りたい場合-「ウサギの穴に飛び込む」- Illustrated Redirection Tutorial を参照

Nohupも参照してください-ターミナルを閉じた後もコマンドを実行し続けたい場合に便利です:

Nohup command

(詳細はman Nohup

0
Volker Siegel