Linux

如何在後台執行這個簡單的命令

  • November 15, 2021

我很難在後台執行以下命令:

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

我嘗試nohup在開始時添加,但沒有運氣。也嘗試&在最後添加,但沒有運氣。你有什麼建議嗎?

從問題看,好像要關閉腳本的輸出?嘗試這個:

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>&-with xselormpv會導致一些問題,所以>/dev/null 2>&1可能是一個更好的選擇。當使用>&-2>&-與包含xsel -ib,的 shell 腳本一起使用時,xsel -ib沒有效果,但xclip沒有這個問題。此外,>&- 2>&-不會完全關閉mpv輸出,而是完全>/dev/null 2>&1關閉mpv輸出。我不確定這些問題背後的原因。我想也許有些程序在 stdout 或 stderr 關閉的情況下不能很好地工作。

引用自:https://unix.stackexchange.com/questions/675911