我正在测试使用通配符进行重定向。类似的东西:
./TEST* < ./INPUT* > OUTPUT
有人有什么建议吗?谢谢。
答案 0 :(得分:2)
假设您有以下5个文件:TEST1
,TEST1
,INPUT1
,INPUT2
和OUTPUT
。命令行
./TEST* < ./INPUT* > OUTPUT
将扩展为
./TEST1 ./TEST2 < ./INPUT1 ./INPUT2 > OUTPUT.
换句话说,您将使用2个参数(./TEST1
,./TEST2
)运行命令./INPUT2
,其输入重定向自./INPUT1
,其输出重定向到{ {1}}。
要解决您可能尝试执行的操作,您只能使用输入重定向指定单个文件。要从两个OUTPUT
文件向TEST
发送输入,您需要使用以下内容,使用进程替换:
INPUT*
要在匹配./TEST1 < <(cat ./INPUT*) > OUTPUT
的所有输入文件上运行与TEST*
匹配的每个程序,请使用以下循环。它收集所有命令的输出并将它们放入单个文件INPUT*
。
OUTPUT
答案 1 :(得分:1)
有一个名为TEST *的程序必须将各种重定向转换为所谓的INPUT *,但问题是有很多TEST程序并且它们都有不同的编号,例如TEST678。我要做的是将所有随机INPUT文件推送到所有TEST程序中。
你可以写:
for program in TEST* # e.g., program == 'TEST678'
do
suffix="${program#TEST}" # e.g., suffix == '678'
input="INPUT$suffix" # e.g., input == 'INPUT678'
"./$program" < "$input" # e.g., run './TEST678 < INPUT678'
done > OUTPUT
答案 2 :(得分:0)
for test in ./TEST*; do
for inp in ./INPUT*; do
$test < $inp >> OUTPUT
done
done