쉘 스크립트에서 "fg"와 같은 명령을 사용할 수 있습니까?

쉘 스크립트에서 "fg"와 같은 명령을 사용할 수 있습니까?

패키지 가 포함된 재미있는 터미널 화면 보호기를 만들려고 합니다 cmatrix(터미널을 영화와 같은 패키지로 전환).행렬) xprintidle단말기의 유휴 시간을 확인합니다.

도움을 좀 받았어요슈퍼유저의 주제 답변그리고 다음과 유사한 쉘 스크립트를 사용하십시오.

화면 보호기

#!/bin/sh
set -x  # Used for debugging
IDLE_TIME=$((60*1000)) #a minute in milliseconds

screen_saver(){
# My screensaver function
    cmatrix -abs
}

sleep_time=$IDLE_TIME
triggered=false

while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            screen_saver
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        sleep_time=$((IDLE_TIME -idle+100))
    fi
done

다음을 사용하여 포그라운드에서 스크립트를 실행하면 스크립트가 완벽하게 실행됩니다.

./screensaver.sh

매트릭스 터미널이 트리거되는 것을 볼 수 있습니다.

그러나 백그라운드에서 실행하면 &함수가 screen_saver()백그라운드에서 실행되어 볼 수 없습니다. 매트릭스 터미널을 볼 수 있는 유일한 방법은 fg터미널을 전경으로 가져오는 것입니다.

질문

fg함수에서 screen_saver()다음 명령을 사용할 수 있습니까 ?

screen_saver(){
     cmatrix -abs && fg
}

아니면 쉘 스크립트에서 이를 전경으로 가져오는 유사한 옵션이 있습니까?

나는 이것을 내 스크립트에 추가하여 .bashrc실제로 사용자 정의 가능한 기능이 되기를 바라고 있습니다. 가능합니까?

답변1

작업 fg명령은 대화형 세션에만 연결되며 배치 모드(스크립팅)에서는 의미가 없습니다.

set -m기술적으로는 이러한 대화형 스크립트가 없으므로 의미가 없으므로 다음을 사용하여 활성화할 수 있습니다 .

대답은 이렇습니다. 실제로는 그럴 수 없습니다.

답변2

tmux를 사용하는 경우 "화면 보호기" 옵션이 있습니다.

set -g lock-command "cmatrix -abs"
set -g lock-after-time 10 #inSeconds

귀하의 질문에 대한 정확한 답변은 아닙니다.

관련 정보