답변:
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
이렇게하면 스크립트가 계속 작동하거나 즉시 제어권을 복원 할 수 있습니다. 스크립트의 새로운 백그라운드 작업 은 sleep 및 echo라는 두 가지 명령으로 시작됩니다.
일반적인 오류 중 하나를 제공하기 위해 노력하고있다 sleep
거나 echo
또는 둘 모두 &
하는하지 않습니다 작업 의도 한대로. 일련의 명령을 실행 ()
하면 별도의 셸 프로세스에서 명령이 생성되고을 사용하여 전체를 백그라운드로 보낼 수 있습니다 &
.
그 위트에 내가 적극적으로 유용하다는 것을 알았습니다. 임베디드 장치에는 워치 독과 작동하는 주요 응용 프로그램이 있습니다. 시작 후 곧바로 워치 독 재설정을 트리거하는 방식으로 실패하면 반복적으로 OS 시작과 재설정 사이의 기간이 매우 짧아서 원격으로 수정하기가 어렵습니다. 따라서 시스템이 너무 빨리 다시 시작되었는지 확인하고 지연이 발생하면 수동으로 해결할 시간을 줄 수있는 방법이 필요합니다.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
로그인 touch /tmp/noautostart
하고 메인 앱을 수행 하면 시작되지 않습니다. 워치 독이 시작되고 rm /tmp/startdelay
수행되지 않으며 다음에 시스템이 시작될 때 30 초가 더 걸리게됩니다. 그렇지 않으면 지연없이 재시동이 빠릅니다.
&
을 배경으로 수면을 포함하는 함수를 실행하는 것이 었습니다 . "수면도 배경을해야한다" 는 처음부터 첫 줄에 있었다. 나를 믿지 않으면 편집 기록을보십시오. 그리고 내 대답은 당신보다 5 분 더
()
그룹을 배경으로하지 않는다면 , 생성 된 쉘이 끝날 때까지 원래 쉘은 일시 중지됩니다.)
at
명령을 사용
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
백그라운드에서 실행됩니다
echo
heredoc 또는 herestring을 사용하여 전체를 포기할 수 있습니다.
at
은 표준 POSIX 명령입니다. 어떤 유닉스 계열 시스템은 기본적으로 사용할 수 없습니까?
5 분 안에 무언가를 실행하고 싶지만 나머지 프로그램을 계속 (또는 마치려면) 수면을 배경으로해야합니다.
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
인쇄 hello
한 다음 3 초 후에 (기본 프로그램이 종료 된 후) print 인쇄 world
합니다.
중요한 부분은 &
함수 실행을 백그라운드로 포크하는 것입니다.
runWithDelay () { sleep $1; "${@:2}"; }
대신 제안해도 될까요?
doWhateverWithDelay 3 &
두 번째 예제에서 읽어야한다고 생각합니다 .
$@
는 인용 할 수 있고 인용 단어 목록으로 확장됩니다. 그래서 더 잘하십시오 "$@"
(또는 "${@}"
중괄호를 좋아한다면). pastebin.com/MU7hbB2C
-n
) 와 함께 args를 사용하여 시도 했지만 분명히 순진합니다.