동안: 명령을 찾을 수 없습니다

동안: 명령을 찾을 수 없습니다

나는 이것을 만우절 장난으로 하려고 합니다. Linux 상자가 몇 초마다 셸에 메시지를 표시하도록 하려는 것입니다.

내 생각은 백그라운드 작업으로 실행되는 무한 루프(.bashrc에서)를 시작하여 이를 수행하는 것입니다.

예를 들어, 내가 원하는 것은 다음과 같습니다.

while true ; do echo Evil Message; sleep 10; done

백그라운드에서 실행하려면 다음을 시도했습니다.

cmd="while true ; do echo Evil Message; sleep 10;"
$cmd &

그러나 이것은 오류로 인해 실패합니다.

while: command not found

오류 메시지가 나타나는 이유는 무엇입니까? 이 스크립트를 작동하게 하는 방법이 있나요?

답변1

while명령이 아니라 쉘 키워드입니다. 변수 확장이 발생하기 전에 키워드가 인식되므로 확장 후에는 너무 늦습니다.

여러 가지 옵션이 있습니다:

  1. 변수를 전혀 사용하지 마십시오.

    while true ; do echo Evil Message; sleep 10; done &
    
  2. eval변수의 확장된 값에 대해 쉘을 실행하는 데 사용됩니다.

    eval "$cmd" &
    
  3. 루프를 실행하려면 셸을 호출하세요.

    bash -c "$cmd" &
    
  4. 함수 사용(보통 코드를 저장하는 데 사용됨):

    cmd() { while true ; do echo Evil Message; sleep 10; done; }
    cmd &
    

답변2

또 다른 옵션(choroba의 답변에 나열된 모든 좋은 옵션 외에도)은 다음과 같이 하위 쉘에서 실행하는 것입니다.

(while true; do echo Evil Message; sleep 10; done;) &

이렇게 하면 bash코드의 다른 인스턴스가 백그라운드에서 실행됩니다.

관련 정보