나는 이것을 만우절 장난으로 하려고 합니다. 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
명령이 아니라 쉘 키워드입니다. 변수 확장이 발생하기 전에 키워드가 인식되므로 확장 후에는 너무 늦습니다.
여러 가지 옵션이 있습니다:
변수를 전혀 사용하지 마십시오.
while true ; do echo Evil Message; sleep 10; done &
eval
변수의 확장된 값에 대해 쉘을 실행하는 데 사용됩니다.eval "$cmd" &
루프를 실행하려면 셸을 호출하세요.
bash -c "$cmd" &
함수 사용(보통 코드를 저장하는 데 사용됨):
cmd() { while true ; do echo Evil Message; sleep 10; done; } cmd &
답변2
또 다른 옵션(choroba의 답변에 나열된 모든 좋은 옵션 외에도)은 다음과 같이 하위 쉘에서 실행하는 것입니다.
(while true; do echo Evil Message; sleep 10; done;) &
이렇게 하면 bash
코드의 다른 인스턴스가 백그라운드에서 실행됩니다.