この単純なコマンドをバックグラウンドで実行する方法

この単純なコマンドをバックグラウンドで実行する方法

バックグラウンドで次のコマンドを実行するのが困難です。

find /dir -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \; -exec sleep 1 \;

nohup最初に追加しようとしましたが、運がありませんでした。また、&最後に追加しようとしましたが、運がありません。コメントありますか?

答え1

質問によると、スクリプト出力をオフにしたいと思いますか?この試み:

nohup find /dir -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \; -exec sleep 1 \; 0<&- >&- 2>&- &

重複の可能性があります。詳細については、次を参照してください。https://stackoverflow.com/a/10908325/9008720

タスクを実行するためのスクリプトを生成すると便利です。たとえば、次のようになります。

#!/bin/sh
nohup "$@" 0<&- >&- 2>&- &

次にmakeをo実行するときにそれを呼び出してバックグラウンドで実行するようにします。o some command scriptsome command script

編集する:

最近orを>&- 2>&-使用すると、いくつかの問題が発生する可能性があるため、より良い選択になることがわかりました。を含むシェルスクリプトと一緒に使用するか、を含むシェルスクリプトと組み合わせて使用​​すると、効果はありませんが、問題は発生しません。また、出力が完全にオフになるのではなく、出力が完全にオフになる現象です。これらの問題の原因が何であるかよくわかりません。おそらく、いくつかのプログラムはstdoutまたはstderrをオフにしても正常に動作しないと思いました。xselmpv>/dev/null 2>&1>&-2>&-xsel -ibxsel -ibxclip>&- 2>&-mpv>/dev/null 2>&1mpv

関連情報