Cómo ejecutar este sencillo comando en segundo plano

Cómo ejecutar este sencillo comando en segundo plano

Me está costando mucho intentar ejecutar el siguiente comando en segundo plano:

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

Intenté agregar nohupal principio sin suerte. También intenté agregar &al final pero no tuve suerte. ¿Tienes alguna sugerencia?

Respuesta1

Por el problema, ¿parece que quieres cerrar la salida del script? Prueba esto:

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

Posible duplicado y más información verhttps://stackoverflow.com/a/10908325/9008720

Puede resultar útil crear un script para hacer este trabajo, como:

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

Llamémoslo o, así que la próxima vez simplemente ejecute o some command scriptpara some command scriptejecutar en segundo plano.

EDITAR:

Recientemente descubrí que usarlo >&- 2>&-con xselo mpvcausa algunos problemas, por lo que >/dev/null 2>&1podría ser una mejor opción. Cuando se usa >&-o 2>&-con un script de shell que contiene xsel -ib, xsel -ibno tiene ningún efecto, pero xclipno tiene este problema. Además, >&- 2>&-no cierra completamente mpvla salida, pero sí la >/dev/null 2>&1cierra por completo mpv. No estoy seguro de la razón detrás de esos problemas. Creo que tal vez algunos programas simplemente no funcionen bien con stdout o stderr cerrados.

información relacionada