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的主要内容,如果未能解决你的问题,请参考以下文章