我试图找出如何在重复中重复复杂的命令tcsh
,就像这样
repeat 9999 (curl http://localhost:80/index.php; echo)
我在这里使用子shell而不是{
and}
因为,根据http://hyperpolyglot.org/unix-shells,tcsh没有这个功能。
但是,我从之前的构造中得到了以下意外错误。
Badly placed ()'s
那么,如何使用 重复复杂的命令tcsh
?
有一些关于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)
因为这在子 shell 中运行整个命令。但甚至:
(repeat -c 3 echo a; echo b)
将重复echo a
三次但只调用echo b
一次..
然而:
repeat -c 3 "echo a"
如果您想使用内置命令重复多个简单命令,建议使用此命令repeat
。这甚至适用于不太简单的命令,因为repeat
其行为类似于eval
.