我想为我的每个输入文件使用 shell 脚本到 运行 我的 java 程序

I want to use shell scripting to run my java program for each of my input files

我有一个输入文件目录,我想使用 shell 脚本在控制台上执行这些文件,然后在新的输出目录中创建输出文件。

#!/bin/bash

FILES="inputs/*.txt"
for f in $FILES
do
    basename=${f%.*}
    java main accounts.txt rentalunits.txt
    cat "$f"
    
done >> $basename.out

我使用

尝试了运行这段代码
sh testscript

对于两个文本文件,但它只创建一个输出文件并卡在 java 程序中的第一个扫描仪处。

只是猜测

#!/bin/bash

FILES="inputs/*.txt"
for f in $FILES
do
    basename=${f%.*}
    java main accounts.txt rentalunits.txt < "$f" > "$basename.out"
done

此外,无需指定解释器,因为您有 shebang

chmod +x testscript
./testcript

您已经找到了答案,但是遍历 glob 模式文件的正确方法是:

for f in inputs/*.txt; do ...

即不要将模式放在变量中:它会强制您将变量不加引号,这可能会产生意想不到的后果。

如果要使用变量,在bash中使用数组:

files=( inputs/*.txt )
for f in "${files[@]}"; do ...

现在,由于 bash-specific 功能,您必须使用 bash ./testscript 而不是 sh