我想为我的每个输入文件使用 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
我有一个输入文件目录,我想使用 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