0

さて、次の方法で実行したいファイルがたくさんtest_xxあります。validate_xx

./path/test_01 | ./server | ./path/validate_01

./path/test_02 | ./server | ./path/validate_02

... 等々。

次に、run_allこれらの他のすべてのスクリプトを見つけて、この方法ですべて実行するスクリプトを作成します。

次のコードを使用して、たとえばtest_01のみを検索して実行できます。

find ./*/ -name test_01 -exec {} \;

したがって、2つの問題があります。

  1. (重要!)パイピングと2つの不明なディレクトリを検索して、bashに上記のより複雑な行を実行させるにはどうすればよいですか?1つのコマンドを実行する方法しか見つかりません。

  2. (それほど重要ではありませんが、それでも問題があります...)このスクリプトをループして、ディレクトリ内のすべてのテスト/検証スクリプトを実行してから停止するための最良の方法は何でしょうか。スクリプトの名前は現在test_01、test_02、...、test_26(およびvalidate_xxの場合も同様)ですが、test_27などを追加しても、スクリプトを変更せずに引き続き機能させたいと考えています。

4

2 に答える 2

1

それらが複数のディレクトリにまたがっていない場合は、以下を使用する必要はありませんfind

for test in path/test*; do $test | ./server | ${test/test/validate}; done

ところで、便利な一口:${a/b/c}構文は言う:変数の値を取り、 。aに置き換えます。bc

検索が必要な場合は、シェルスクリプト内でリダイレクトをラップできます。

find dir -exec sh -c '... | ... | ...' \;

編集:もう少し詳しく、

find . -name test\* -exec sh -c '
  test={}
  validate=${test/test/validate}
  $test | ./server | $validate
' \;
于 2013-01-07T10:08:16.917 に答える
0

forループを使用します。たとえば、テストをループして、パラメーター展開を介してテストから数値を抽出できます。

for test in ./path/test_[0-9][0-9] ; do
    "$test" | ./server | ./path/validate_${test: -2}
done
于 2013-01-07T10:07:07.277 に答える