サブシェル反復を使用する `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 a3回繰り返されますが、echo b1回だけ呼び出されます。

しかし:

repeat -c 3 "echo a"

組み込みコマンドを使用して複数の簡単なコマンドを繰り返す場合は、このコマンドをお勧めしますrepeatrepeatこれは同じように動作するため、あまり単純なコマンドでも機能しますeval

関連情報