バックグラウンドで以下のコマンドを実行するのに非常に苦労しています。
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 が閉じられているとうまく動作しないだけなのかもしれません。xsel
mpv
>/dev/null 2>&1
>&-
2>&-
xsel -ib
xsel -ib
xclip
>&- 2>&-
mpv
>/dev/null 2>&1
mpv