Как запустить эту простую команду в фоновом режиме

Как запустить эту простую команду в фоновом режиме

Мне очень трудно выполнить следующую команду в фоновом режиме:

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>&-с xselили mpvвызывает некоторые проблемы, поэтому >/dev/null 2>&1может быть лучшим выбором. При использовании >&-или 2>&-со скриптом оболочки, содержащим xsel -ib, xsel -ibне имеет никакого эффекта, но xclipне имеет этой проблемы. Кроме того, >&- 2>&-не полностью закрывает mpvвывод, хотя >/dev/null 2>&1полностью закрывает mpvвывод. Я не уверен, в чем причина этих проблем. Я думаю, что, возможно, некоторые программы просто плохо работают с закрытыми stdout или stderr.

Связанный контент