nohupを使用して複数のコマンドを実行する方法


41

を使用して複数のコマンドを実行する必要がありますnohup。各コマンドは、前のコマンドの後に実行する必要があります。

例としてこのコマンドを使用しました。

nohup wget $url && wget $url2 > /dev/null 2>&1 &

ただし、そのコマンドは機能しませんでした。

この目的のためにどのコマンドを使用する必要がありますか?

回答:


56

包むsh -c

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
nohupを起動すると、「nohup:入力を無視してstderrをstdoutにリダイレクトする」というメッセージが表示されるので、「2>&1」は冗長ではありませんか?
ハーシュウェア

1
多分。答えを書いたとき、質問からそれをコピーしたと思います。
jw013

6

nohupを使用せずに、command.shなどの別のシェルファイルにコマンドのリストを作成する方がはるかに簡単ではないでしょうか。

それからあなたは電話する:

nohup bash command.sh

4

他の人はすでにについて回答していnohupます。実用的な注意点として:私は、内この種のものを行うことをお勧めscreenまたはtmuxセッション。そうすれば、切断してから再接続して、出力と最終結果を確認できます。


1
この答えは、インタラクティブなシナリオには最適ですが、スクリプトや自動化には意味がありません。
ジョナサンハートリー

0

次のように簡単になります。

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

ただし、URLに特殊文字が含まれている場合は問題が発生する可能性があるため、より安全なオプションとして次を使用できます。

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
パラメータを渡すための唯一の安全な方法は、sh -c位置パラメータを介してアクセスすることができる別個の引数を介して行われます($0$1、...)。文字列解析のために引数を適切に引用する簡単または簡単な方法はありません。二重引用符が$url含まれている場合、エスケープされた二重引用符を使用しようとしても失敗します。試してみa='problem"'; sh -c "echo \"$a\""てください- sh -c実行しようとするため、構文エラーが発生するはずですecho "problem""
jw013

@ jw013興味のないことですが、あなたの反対は-ohによって受け入れられた答えに等しく適用されますか。あなたによって。おそらくそうではありません。しかし、なぜそうなのか理解できません!:
ジョナサンハートリー

1
@JonathanHartleyあなたの質問を理解したかどうかわかりません。あなたは私にこの答えを比較する場合は慎重に、あなたは方法の違いに気づくはずです$urlし、$url2使用されています。
-jw013

@ jw013ああ、もちろん。私はばかげていた。まっすぐにしてくれてありがとう。
ジョナサンハートリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.