我正在测试使用通配符进行重定向。就像是:
./TEST* < ./INPUT* > OUTPUT
有人有什么建议吗?谢谢。
假设您有以下 5 个文件:TEST1
、TEST1
、INPUT1
、INPUT2
和OUTPUT
. 命令行
./TEST* < ./INPUT* > OUTPUT
将扩大到
./TEST1 ./TEST2 < ./INPUT1 ./INPUT2 > OUTPUT.
换句话说,您将./TEST1
使用 2 个参数 ( ./TEST2
, ./INPUT2
) 运行该命令,其输入重定向自./INPUT1
,其输出重定向至OUTPUT
。
要解决您可能尝试做的事情,您只能使用输入重定向指定单个文件。TEST
要从这两个文件发送输入INPUT*
,您需要使用类似以下的内容,使用进程替换:
./TEST1 < <(cat ./INPUT*) > OUTPUT
TEST*
要在所有匹配的输入文件上运行每个匹配的程序INPUT*
,请使用以下循环。它收集所有命令的输出并将它们放入一个文件OUTPUT
中。
for test in ./TEST*; do
cat ./INPUT* | $test
done > OUTPUT
有一个称为 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
for test in ./TEST*; do
for inp in ./INPUT*; do
$test < $inp >> OUTPUT
done
done