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

发布于 2025-01-16 09:52:50 字数 352 浏览 0 评论 0原文

我有一个输入文件目录,我想使用 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 程序中的第一个扫描仪上。

I have a directory of input files and I want to use a shell script to execute these files onto the console and then create output files in a new output directory.

#!/bin/bash

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

I tried running this code using

sh testscript

for two text files but it only creates one output file and gets stuck at the first scanner in the java program.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小傻瓜 2025-01-23 09:52:50

只是猜测

#!/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

Just guessing

#!/bin/bash

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

Also, no need to specify the interpreter as you have the shebang

chmod +x testscript
./testcript
时光无声 2025-01-23 09:52:50

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

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

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

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

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

现在,由于 bash 特定的功能,你必须使用 bash ./testscript 而不是 sh

You've got your answer, but the correct way to loop over the files of a glob pattern is:

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

i.e. don't put the pattern in a variable: it forces you to leave your variables unquoted which may have unintended consequences.

If you want to use a variable, in bash use an array:

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

and now, because of the bash-specific features, you have to use bash ./testscript not sh

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文