`tcsh` 使用子 shell 重复

`tcsh` 使用子 shell 重复

我试图找出如何在重复中重复复杂的命令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.

相关内容