サブシェルで `tcsh`を繰り返す


0

私は中に繰り返し内部で複雑なコマンドを繰り返す方法を把握しようとしているtcshので、同様に、

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

私はここでサブシェルを使用しています代わりに{して}いるため、に従ってhttp://hyperpolyglot.org/unix-shells、tcshのは、この機能を持っていません。

ただし、前の構成から次の予期しないエラーが発生します。

Badly placed ()'s

では、複雑なコマンドをどのように繰り返すのtcshですか?

奇妙な不整合についての古い暴言がいくつかcshあり、拡張によりtcsh、たとえば、これはhttp://www.grymoire.com/unix/CshTop10.txtです。したがって、このエラーについてどう考えるべきかわかりません。

回答:


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. [..]

だから、これはあなたができることではないようです。

この問題を回避するには、簡単なラッパースクリプトを使用できます。


2

そのために「eval」を使用できると思います。例えば:

repeat 7 eval "cmd1;cmd2"

1

別の回避策は、代わりにZSHを使用することです。

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

1

のでrepeat組み込みコマンドではなく、構文の一部である、あなたは簡単に引数リストに()Sを使用することはできません。

たとえBourne Shellそれがtcsh

repeat -c 3 (echo a)

動作しないでしょう。

動作するのは:

(repeat -c 10 echo a)

これはサブシェルでコマンド全体を実行するためです。それでも:

(repeat -c 3 echo a; echo b)

echo a3回繰り返しますが、1回だけ呼び出しecho bます。

しかしながら:

repeat -c 3 "echo a"

repeat組み込みの単純なコマンド以上のものを繰り返したい場合に推奨されます。これは、単純なコマンドでもrepeat動作しevalます。


どのシェルを使用していますrepeat -c 3 "echo a"か?私はそれをテストしてみたbashdashmkshrepeatBourne互換シェルで関数を自分で定義することについて話していますか?
グレゴリーニズベット

なるほど、最近BourneShellについて話しています:schilytools.sourceforge.net/bosh.htmlrepeat実装コマンド-cオプションが最初に私の中で1984年に登場しbsh同様の外部に基づき、UNOS(UNOSは最初のUNIXクローンだった)1980年からのコマンドを。繰り返しおよびその他の機能bshBourne Shellaproxに追加されました。4年前。
気味悪い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.