3

我一直认为当前目录是用户的东西,而不是脚本,因为它取决于用户的位置,并且每次执行脚本时都可能不同。

所以当我遇到 Java jar 实用程序的-C选项时,我有点困惑。


对于那些不知道-C在指定要包含在 jar 中的文件/文件夹之前使用该选项的人。由于文件/文件夹的路径已复制到 jar 中,因此该-C选项会在包含文件之前更改目录:

换句话说:

jar -C flower lily.class

将制作一个包含该lily.class文件的 jar,而:

jar flower/lily.class

flower在 jar 中创建一个文件夹,其中包含lily.class


对于我正在制作的 jar-ing 脚本,我想使用 Bourne 通配符,folder/*但这会使使用-C变得不可能,因为它仅适用于下一个直接参数。

所以使用通配符的唯一方法是从当前目录运行;但我仍然对在脚本中更改和使用当前目录感到不安。

在脚本中使用当前目录有什么缺点吗?也许是出于某种原因不赞成?

4

1 回答 1

1

我认为从 shell 脚本更改当前目录本身没有任何问题。当然,如果它自己采取,它不会导致任何不好的事情发生。

事实上,我有一个用于启动基于 Java 的服务器的标准脚本,第一行是:

cd `dirname $0`

这确保脚本中的其余命令在包含脚本文件本身的目录中执行(当单台机器托管多个服务器实例时很有用),而不管实际调用 shell 脚本的位置。cd在不更改脚本中的当前目录的情况下,只有在用户记得在运行脚本之前手动进入相应目录 时,它才能正常工作。

在这种情况下,cd从脚本中执行操作可以从服务器启动/关闭过程中删除一个手动步骤,从而使事情变得不太容易出错。

因此,与大多数事情一样,这类事情也有合法用途。我敢肯定也有一些值得怀疑的地方。这实际上取决于什么最适合您的特定用例。这是我无法真正评论的事情......我总是让maven我为我构建我的 JAR。

于 2012-05-28T23:40:26.320 回答