栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用bash,如何从目录中的所有文件中创建类路径?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用bash,如何从目录中的所有文件中创建类路径?

新答案
(2012年10月)

无需手动构建类路径列表。Java支持包含jar文件的目录的便捷通配符语法。

java -cp "$LIB/*"

(请注意,

*
引号)。

来自的解释

man java

为了特别方便,包含*的基本名称的类路径元素被认为等效于指定目录中所有带有扩展名

.jar
.JAR
(Java程序无法区分两次调用之间的区别)的文件列表。

例如,如果目录foo包含

a.jar
b.JAR
,则将类路径元素
foo/*
扩展为
A.jar:b.JAR
,除非未指定jar文件的顺序。列表中包括指定目录中的所有jar文件,甚至是隐藏的jar文件。仅由组成的类路径条目
*
扩展为当前目录中所有jar文件的列表。的
CLASSPATH
环境变量,其中所定义,将类似地扩展。任何类路径通配符扩展都会在Java虚拟机启动之前发生-
除查询环境外,任何Java程序都不会看到未扩展的通配符。


旧答案

简单但不完美的解决方案:

CLASSPATH=$(echo "$LIB"/*.jar | tr ' ' ':')

有一个小缺陷,那就是不能正确处理带有空格的文件名。如果那很重要,请尝试以下稍微复杂一些的版本:

更好

CLASSPATH=$(find "$LIB" -name '*.jar' -printf '%p:' | sed 's/:$//')

这仅在您的find命令支持时才有效

-printf
(如GNU
find
那样)。

如果没有

find
Mac OS X上的GNU ,则可以
xargs
改用:

CLASSPATH=$(find "." -name '*.jar' | xargs echo | tr ' ' ':')

最好?

另一种(更奇怪的)方法是更改​​字段分隔符变量

$IFS
。这看起来很奇怪,但是在所有文件名下都表现良好,并且仅使用shell内置程序。

CLASSPATH=$(JARS=("$LIB"/*.jar); IFS=:; echo "${JARS[*]}")

说明:

  1. JARS
    设置为文件名数组。
  2. IFS
    更改为
    :
  3. 回显该数组,并将
    $IFS
    其用作数组条目之间的分隔符。表示文件名之间用冒号打印。

所有这些都是在子Shell中完成的,因此对的更改

$IFS
不是永久的(这将是baaaad)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号