バックグラウンドの仕事が彼らにやったことを教えないようにするにはどうすればいいですか


3

RVM(Ruby Version Manager)ではあなたが作成することができます .rvmrc プロジェクトごとのファイル。これは基本的なルビーバージョンとライブラリ(gem)管理を扱います。このスクリプトは自動的に実行されます。 cd ディレクトリに。しかし、それはBashスクリプトに他なりません。スクリプトには、次のような特定の部分があります。

(
  if ! command -v bundle ; then
    gem install bundler --no-rdoc --no-ri
  fi

  bundle | grep -v 'Using' | grep -v 'complete' | sed '/^$/d'

) &

これはいつでも実行されるので cd 私が毎回次のものを得なかったなら、それはディレクトリの中に、それは素晴らしいことです:

[1]+  Done                    ( if ! command -v bundle; then
    gem install bundler --no-rdoc --no-ri;
fi; bundle | grep --color=auto -v 'Using' | grep --color=auto -v 'complete' | sed '/^$/d' )

これらの一連のコマンドをバックグラウンドで実行できる方法はありますか ではない 完了したら通知を受ける。または少なくとも、メッセージが次のようになるように、あまり煩わしくない方法で通知されます。

[1]+ Bundler is done! :-)

ありがとうございます。

回答:


3

使ってみる disown、 例えば:

sleep 1 & disown

から man bash

disown [-ar] [-h] [jobspec ...]

オプションを指定しないと、各jobspecはアクティブジョブのテーブルから削除されます。 jobspecが存在せず、-aも-rも指定されていない場合は、シェルの現在のジョブの概念が使用されます。 -hオプションを指定すると、各jobspecはテーブルから削除されませんが、シェルがSIGHUPを受け取った場合にSIGHUPがジョブに送信されないようにマークされます。 jobspecが存在せず、-aオプションも-rオプションも指定されていない場合、現在のジョブが使用されます。 jobspecが指定されていない場合、-aオプションはすべてのジョブを削除またはマークすることを意味します。 jobspec引数を指定せずに-rオプションを指定すると、実行中のジョブに操作が制限されます。 jobspecで有効なジョブが指定されていない限り、戻り値は0です。


よく働く!唯一の問題はそれが私がそれが捨て去っている命令を示すということです。大したことではありませんが、できればそれも隠したいと思います。 :-)
John

1
(sleep 1 & disown) 2>/dev/null
choroba

0

すべての出力をログファイルまたは/ dev / nullにリダイレクトすることもできます。最後の行を変更するだけです。

) &

) 2>&1 >>/var/log/rvm-log &
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.