이 간단한 명령을 백그라운드에서 실행하는 방법

이 간단한 명령을 백그라운드에서 실행하는 방법

백그라운드에서 아래 명령을 실행하는 데 정말 어려움을 겪고 있습니다.

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

편집하다:

나는 최근에 or 를 사용 >&- 2>&-하면 몇 가지 문제가 발생한다는 것을 발견했기 때문에 더 나은 선택이 될 수 있습니다. 을 포함하는 쉘 스크립트 또는 를 사용하면 아무런 효과가 없지만 이 문제는 발생하지 않습니다. 또한 출력을 완전히 닫는 것이 아니라 출력을 완전히 닫습니다 . 그 문제의 원인이 무엇인지 잘 모르겠습니다. 아마도 일부 프로그램은 stdout이나 stderr을 닫은 상태에서 제대로 작동하지 않는 것 같습니다.xselmpv>/dev/null 2>&1>&-2>&-xsel -ibxsel -ibxclip>&- 2>&-mpv>/dev/null 2>&1mpv

관련 정보