Unix shell:将带有目录名的文件转换为':'分隔的classpath

nah*_*hab 1 java unix shell java-5

我使用Java5,我不想在Classpath中指出每个.jar文件,所以我试着编写小的shell脚本:

find $LIB_DIR -name '*.jar' -print > /tmp/classpath
CP= 
cat /tmp/classpath | while read line
do 
CP=$CP:$line
done 
rm -f /tmp/classpath
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - $ CP变量是空的.

因此,$ CP应该是单个字符串,其中包含由':'分隔的路径

有谁知道这里有什么问题,以及如何正确地将所有文件的行连接到一个字符串?

Ste*_*ker 5

您的while循环位于子shell中,因此不会将任何变量传递回主shell.无论如何,你想做这样的事情:

CP=$(find $LIB_DIR -name '*.jar' -print | tr '\n' ':')
Run Code Online (Sandbox Code Playgroud)

那就是你想要的一切都在一条线上.

  • 可以添加sed s /:$ //以删除尾随冒号. (2认同)