tcsh
다음과 같이 Repeat 내에서 복잡한 명령을 반복하는 방법을 알아내려고 합니다 .
repeat 9999 (curl http://localhost:80/index.php; echo)
나는 여기에서 {
and }
대신에 서브쉘을 사용하고 있습니다.http://hyperpolyglot.org/unix-shells, tcsh에는 이 기능이 없습니다.
그러나 이전 구성에서 다음과 같은 예기치 않은 오류가 발생합니다.
Badly placed ()'s
그렇다면 반복되는 복잡한 명령을 어떻게 사용합니까 tcsh
?
and에 대해 이상하게 도 csh
일관성이 없는 오래된 진술이 있습니다 .tcsh
http://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
.