서브쉘 반복을 사용하는 `tcsh`

서브쉘 반복을 사용하는 `tcsh`

tcsh다음과 같이 Repeat 내에서 복잡한 명령을 반복하는 방법을 알아내려고 합니다 .

repeat 9999 (curl http://localhost:80/index.php; echo)

나는 여기에서 {and }대신에 서브쉘을 사용하고 있습니다.http://hyperpolyglot.org/unix-shells, tcsh에는 이 기능이 없습니다.

그러나 이전 구성에서 다음과 같은 예기치 않은 오류가 발생합니다.

Badly placed ()'s

그렇다면 반복되는 복잡한 명령을 어떻게 사용합니까 tcsh?

and에 대해 이상하게 도 csh일관성이 없는 오래된 진술이 있습니다 .tcshhttp://www.grymoire.com/unix/CshTop10.txt. 그래서 이 오류를 어떻게 처리해야 할지 모르겠습니다.

답변1

다음과 같이 "eval"을 사용할 수 있다고 생각합니다.

repeat 7 eval "cmd1;cmd2"

답변2

에서 tcsh(1):

repeat count command
    The  specified  command,  which is subject to the same restric‐
    tions as the command in the one line  if  statement  above,  is
    executed  count  times. [..]

if문서 에서 다음을 볼 수 있습니다.

if (expr) command
    [..]
    command must  be  a  simple  command,  not  an alias,  a  pipeline,  a
    command list or a parenthesized command list, but it  may  have
    arguments. [..]

그러니 그건 당신이 할 수 있는 일이 아닌 것 같습니다.

이 문제를 해결하려면 간단한 래퍼 스크립트를 사용할 수 있습니다.

답변3

또 다른 해결 방법은 ZSH를 사용하는 것입니다.

% repeat 3 (echo hi; echo there)
hi
there
hi
there
hi
there
% 

답변4

repeat내장 명령이지만 구문의 일부가 아니기 때문에 인수 목록에서 ()를 쉽게 사용할 수 없습니다.

Bourne Shell제한이 적 더라도tcsh

repeat -c 3 (echo a)

작동하지 않습니다.

작동하는 것은 다음과 같습니다.

(repeat -c 10 echo a)

이는 서브쉘에서 전체 명령을 실행하기 때문입니다. 하지만 심지어:

(repeat -c 3 echo a; echo b)

echo a세 번 반복되지만 echo b한 번만 호출됩니다.

하지만:

repeat -c 3 "echo a"

내장된 명령을 사용하여 여러 개의 간단한 명령을 반복하려는 경우 이 명령을 권장합니다 repeat. repeat이는 처럼 동작 하므로 덜 간단한 명령에도 작동합니다 eval.

관련 정보