다음은 왜 작동하지 않습니까? : true인 경우, "$my_command" 실행 1;

다음은 왜 작동하지 않습니까? : true인 경우, "$my_command" 실행 1;

상위 답변에 대한 후속 조치이 문제, 내 생각에 난 할 수있어:

1) 명령 정의:

cmd='for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "arguments" $x; done'

2) 루프는 다음과 같이 실행됩니다.

while true; do "$cmd"; sleep 1; done

그러나 위의 방법은 작동하지 않으며 다음과 같은 결과가 나타납니다.

zsh: command not found for x in $(......
zsh: command not found for x in $(......
zsh: command not found for x in $(......
...

어떤 아이디어가 있나요?

밝히다:

실행하면 for x in $(my_command | grep keyword | cut -d" " -f1); do command2 "arguments" $x; done'완벽하게 작동합니다.

부록:

eval다음과 같이 사용하면 작동한다는 것을 알았습니다 .

while true; do eval "$cmd"; sleep 1; done

cmd매초마다 명령 실행

답변1

동일한 셸에서 실행할 명령을 준비하려면 함수를 사용하세요.

cmd () {
  for x in $(my_command | grep keyword | cut -d" " -f1); do
    command2 "arguments" $x
  done
}
while true; do cmd; sleep 1; done

답변2

따옴표로 묶으면 $cmd쉘이 정확히 같은 이름으로 명령을 실행하도록 요청하는 것입니다. "for x in $(..."라는 명령은 없습니다. 사실 내 시스템에는 "for"라는 명령도 없습니다. 이는 쉘 키워드입니다. 무언가를 실행하려면 를 $cmd사용해야 합니다 eval.

관련 정보