Bash 스크립트를 사용하여 프로그램 전환

Bash 스크립트를 사용하여 프로그램 전환

이를 전환할 수 있는 스크립트(야간 모드 앱)를 만들려고 합니다 redshift. 그래서 저는 이렇게 했습니다.

#!/bin/bash

pgrep redshift > /dev/null && \ 
         killall redshift || \
         setsid redshift [options] &> /dev/null

그러면 프로그램이 백그라운드에서 실행 중이면 종료되고, 그렇지 않으면 실행 중이 됩니다 setsid. 이제 이 스크립트는 프로세스를 종료하면 작동하지만 다시 실행하면 스크립트가 중단됩니다.

  • 내가 뭘 잘못했나요?
  • 터미널을 종료해도 프로그램이 중지되지 않도록 프로세스를 백그라운드에 배치하는 다른 방법이 있습니까?

답변1

Bash를 사용하여 프로그램을 호출하면 Bash는 이를 &>사용자가 원하는 것(백그라운드 연산자 및 stdout 리디렉션)이 아닌 특수 리디렉션 연산자(stdout 및 stderr 모두 &리디렉션 )로 해석합니다 >. 두 개의 태그를 분리하면 예상한 백그라운드 동작을 얻을 수 있습니다.

#!/bin/bash

pgrep redshift > /dev/null && 
  killall redshift || 
    setsid redshift [options] & > /dev/null

미래의 자신에게 좀 더 친절하게 대하고 논리를 조금 확장하는 것을 고려해보세요. 그것을 죽이고 싶다면 redshift몇 가지 옵션을 사용하여 실행하세요.

if pgrep redshift > /dev/null
then
  pkill redshift
fi
setsid redshift options & > /dev/null 

답변2

redshift에는 전환 기능이 있습니다

전환하려면 신호 SIGUSR1을 적색편이 프로세스로 보냅니다.

pkill -USR1 redshift

기록이 있습니다그들의 웹사이트에서, 하지만 에는 없습니다소프트웨어 문서. 하나 열었어요풀 리퀘스트이 기능은 매뉴얼 페이지에 문서화되어 있습니다.

답변3

나는 Gnome에서 데스크탑 아이콘을 전환하는 데 사용합니다.

pkill nemo-desktop || nemo-desktop

물론 이것은 적색편이에도 적용된다.

pkill redshift || redshift

관련 정보