0

好的,所以我有一堆文件test_xxvalidate_xx我想通过以下方式执行:

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

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

... 等等。

现在,我想创建一个run_all脚本来定位所有这些其他脚本并以这种方式运行它们。

我可以使用以下代码仅查找和执行,例如 test_01:

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

所以,我有两个问题:

  1. (重要!)如何让 bash 执行上面更复杂的行,使用管道和两个未知目录进行搜索?我只能找到如何执行单个命令。

  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.

如果确实需要查找,则可以将重定向包装在 shell 脚本中:

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 回答