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

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

バックグラウンドで以下のコマンドを実行するのに非常に苦労しています。

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>&- &

これを と呼ぶことにしますo。次回は を実行して、バックグラウンドで実行o some command scriptするようにします。some command script

編集:

最近、または を>&- 2>&-と併用すると問題が発生することがわかったので、 の方が良い選択かもしれません。を含むシェル スクリプトでまたは を使用すると、は効果がありませんが、ではこの問題は発生しません。また、は出力を完全に閉じませんが、は出力を完全に閉じます。これらの問題の原因はよくわかりません。一部のプログラムは、stdout または stderr が閉じられているとうまく動作しないだけなのかもしれません。xselmpv>/dev/null 2>&1>&-2>&-xsel -ibxsel -ibxclip>&- 2>&-mpv>/dev/null 2>&1mpv

関連情報