
頑張る一部のコマンドを非同期で実行ログインスクリプト(.bash_profile
)から。
新しい端末を開くと、次のメッセージが表示されます。 SSH経由でシステムにログインしたときにも表示されます。
Last login: Sat Jun 11 19:21:44 on ttys001
[1]- Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/cryptopp)
(wd now: ~)
[2]+ Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/openssl)
(wd now: ~)
ログインスクリプトは次のことを行います。
if [ -d "$HOME/cryptopp" ]; then
cd "$HOME/cryptopp"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
if [ -d "$HOME/openssl" ]; then
cd "$HOME/openssl"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
追加のリダイレクトのロールバックは、次のために発生します。nohup:入力を無視し、「nohup.out」に出力を追加します。。追加の一重引用符は次のとおりです。一重引用符で囲まれた文字列から一重引用符をエスケープする方法は?
重要なのはOS Xで作業しているため、Bash 3を使用しています。しかし、スクリプトは通常Linux、BSD、Solarisで動作し、Debian 8でも見たことがあります。
いくつかの質問があります。まず、についての苦情は何ですかnohup
?第二に、nohup
私が文句を言っている問題をどのように解決しますか?第三に、そのようなメッセージを抑制する方法は何ですか?
答え1
出力は からでnohup
はなくシェルから出ます。
これらのプロセスをバックグラウンドに配置するために使用されるため、&
コマンドの終了時にシェルが通知します。シェルでこれを実行したくない場合は、を使用できますdisown
。また、使用するdisown
必要はなくなりますnohup
。
if [ -d "$HOME/cryptopp" ]; then
(
cd "$HOME/cryptopp"
git fetch -p && git pull
) </dev/null &>/dev/null &
disown $!
fi
例では、リダイレクトを使用してサブシェルを作成し、バックグラウンドに配置して破棄します。