2012-05-03 3 views
8

私は端末を開いたときに新しいメッセージの数を表示するために私の.bashrcでスクリプトを呼び出します。ネットワークに接続されていて、数秒かかることがあります。これは、完了するまで端末を使用できないことを意味します。bash "&" print "なし" [1] + Done "

私が入れた場合は:私のbashrcで

mailcheck & 

を、それが正常に動作します。しかし、空の行を印刷し、Enterを押して印刷すると表示されます。

[1]+ Done     ~/bin/mailcheck 

これは非常に面倒ですか?数分のためにそれを考えるの/ dev/nullに

mailcheck & 2>/dev/null 

+0

どのような洞察力のある質問ですか? +1 –

答えて

9

あなたのバックグラウンドの仕事について。それを避ける方法は、ジョブコントロールで管理したくないとbashに伝えることです:

mailcheck & 
disown $! 
+0

なぜ「mailcheck&disown」だけではないのですか? –

2

トライ配管stderrに、別の方法では、ライトを使用するかもしれません。
バックグラウンドタスクの出力を自分自身にパイプすることで、いつでも完了できるようになり、stdoutとstderrからの追加出力をすべてビンすることができます。

mailcheck | write $(whoami) & > /dev/null 
+0

申し訳ありませんが、私はそれを試してみたはずですstderrではないようです –

+0

エラーではないのでstderrしてはいけません。バックグラウンドで実行されているので、プロセスが正常に終了したことを知らせるだけです。多分stdout? –

+0

それはどちらも良いことではない、私はこれを理解していない、もしそれがstdoutまたはstderrではない? –

3

あなたはこのようなあなたのスクリプトを呼び出すことができます。

(exec mailcheck &) 
+0

まだ良くないです。 [1] + Done exec〜/ bin/mailcheck –

+0

テストでうまくいきました。 .bashrcにスクリプト呼び出しを含めると、次回ログイン時に '完了 'メッセージが表示されません。 – anubhava

+0

はい、申し訳ありませんが、私は括弧を忘れました –

4

これは動作するようです:

メッセージがMAILCHECKから来ていない、それはbashののジョブ制御占いからだ
(mailcheck &) 
+0

リダイレクトなしで動作するようです。 –

+0

@Dennis:よく目に付きます - 私はリダイレクトを取り出します。 –