Como executar este comando simples em segundo plano

Como executar este comando simples em segundo plano

Estou tendo muita dificuldade em tentar executar o comando abaixo em segundo plano:

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

Tentei adicionar nohupno início sem sorte. Também tentei adicionar &no final, mas sem sorte. Você tem alguma sugestão?

Responder1

Pelo problema, parece que você deseja fechar a saída do script? Experimente isto:

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

Possível duplicata e mais informações consultehttps://stackoverflow.com/a/10908325/9008720

Pode ser útil criar um script para fazer este trabalho, como:

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

Vamos chamá-lo de o, então da próxima vez você apenas executa o some command scriptpara some command scriptexecutar em segundo plano.

EDITAR:

Recentemente descobri que usar >&- 2>&-with xselou mpvcausa alguns problemas, então >/dev/null 2>&1pode ser uma escolha melhor. Ao usar >&-ou 2>&-com um script de shell que contém xsel -ib, xsel -ibnão tem efeito, mas xclipnão tem esse problema. Além disso, >&- 2>&-não fecha completamente mpva saída, mas >/dev/null 2>&1fecha completamente mpva saída. Não tenho certeza da razão por trás desses problemas. Acho que talvez alguns programas simplesmente não funcionem bem com stdout ou stderr fechados.

informação relacionada