好的,所以我想要以下列方式执行一堆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 {} \;
所以,我有两个问题:
(重要!)如何让bash执行上面更复杂的行,使用管道和两个未知目录进行搜索?我只能找到如何执行单个命令。
(不太重要,但仍然是一个问题......)循环这个脚本的最佳方法是什么,以便它执行目录中的所有测试/验证脚本,然后停止?这些脚本目前名为test_01,test_02,...,test_26(类似于validate_xx) - 但我想脚本仍然可以正常工作,如果我添加test_27等,则无需更改。
答案 0 :(得分:1)
如果它们不跨越多个目录,则不需要使用find
:
for test in path/test*; do $test | ./server | ${test/test/validate}; done
BTW,有用的花絮:${a/b/c}
语法说:获取变量a
的值,并将b
替换为c
。
如果确实需要find,那么可以在shell脚本中包装重定向:
find dir -exec sh -c '... | ... | ...' \;
编辑:更详细一点,
find . -name test\* -exec sh -c '
test={}
validate=${test/test/validate}
$test | ./server | $validate
' \;
答案 1 :(得分:0)
使用for
循环。例如,您可以循环测试并通过参数扩展从中提取数字:
for test in ./path/test_[0-9][0-9] ; do
"$test" | ./server | ./path/validate_${test: -2}
done