KSH 使用变量中的参数运行 Java

Posted

技术标签:

【中文标题】KSH 使用变量中的参数运行 Java【英文标题】:KSH runs Java with arguments in variable 【发布时间】:2011-05-11 23:02:00 【问题描述】:

在获取目录中的文件列表作为运行该 Java 类的参数后,我需要从 KSH 脚本运行 Java。

cd /batch/App/
find /batch/files/ -type f -print -name "*.xls" >> $list_of_files
/usr/java14/bin/java ConvertApp $list_of_files

我认为它的功能类似于/usr/java14/bin/java ConvertApp test1.xls test2.xls test3.xls

但似乎为 Java 传递的参数不成功。有人对此有任何想法吗?谢谢。

【问题讨论】:

【参考方案1】:

您可能想看看xargs

试试这个

find /batch/files/ -type f -print -name "*.xls" | xargs /usr/java14/bin/java ConvertApp

【讨论】:

这不会为每个文件运行一次应用程序,并以该文件作为参数吗? 不,这就是xargs 的重点。它将所有文件作为一长串参数。 ...除非你告诉它一次做一个。顺便说一句,我建议使用find ... -print0 | xargs -0 ... 噢。这是一个巧妙的技巧。不知道xargs 也有-0 的东西。确实不错。 顺便说一句,我目前使用的 Unix 系统似乎不支持-print0 ... 是否有另一种解决方法来处理包含空格的文件名?比如双引号每个文件名java ConvertExcel "sample 55.xls" "abc.xls"【参考方案2】:

我认为你有两个问题。

    find 输出匹配每行一个,您需要将其转换为空格分隔,可能使用 sed 或 awk。

    您可能应该将输出放入变量中,使用;

    list_of_files = 'find ........'

然后调用java

java ConvertApp $list_of_files

【讨论】:

【参考方案3】:

您正在将find 命令找到的.xls 文件附加到文件$list_of_files 中。

接下来,您希望将此文件的内容作为命令行参数发送到您的 java 程序。为此,您可以使用以下命令替换:

/usr/java14/bin/java ConvertApp "$(cat $list_of_files)"

/usr/java14/bin/java ConvertApp "`cat $list_of_files`"

【讨论】:

【参考方案4】:

find ... -print0 | xargs -0 ... 是要走的路。

如果任何文件名中有空格,则推荐cat 或变量的答案将失败。如果你不想使用xargs,如果你使用数组,你可以有更好的成功机会:

saveIFS=$IFS IFS=$'\n'
files=($(find...))
IFS=$saveIFS
java ... "$files[@]"

【讨论】:

以上是关于KSH 使用变量中的参数运行 Java的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量

在 AIX 上运行 Linux Shell

如何删除 ksh 中字符串变量的最后一个字符?

ksh脚本的执行时间

使用 AIX 的 ksh 实现以非交互模式读取配置文件脚本

Java运行数据区----初步版