我总是在心理上将当前目录视为用户而不是脚本,因为它取决于用户的位置,并且每次执行脚本时都可能不同。
所以当我遇到Java jar实用程序的-C
选项时,我有点困惑。
对于那些不知道在指定要包含在jar中的文件/文件夹之前使用-C
选项的人。由于文件/文件夹的路径在jar中复制,-C
选项会在包含文件之前更改目录:
:
jar -C flower lily.class
将创建一个包含lily.class
文件的jar,而:
jar flower/lily.class
将在jar中创建一个包含flower
lily.class
文件夹
对于一个jar-ing脚本,我正在使用Bourne外卡folder/*
,但这会使-C
无法使用,因为它只适用于下一个立即参数。
因此,使用通配符的唯一方法是从当前目录运行;但我仍然对在脚本中更改和使用当前目录感到不安。
在脚本中使用当前目录有什么缺点吗?是不是因为某些原因而不赞成?
答案 0 :(得分:1)
我认为从shell脚本更改当前目录没有任何内在错误。当然,如果单独使用它不会导致任何不好的事情发生。
事实上,我有一个标准脚本用于启动基于Java的服务器,第一行是:
cd `dirname $0`
这确保脚本中的其余命令在包含脚本文件本身的目录中执行(当单个计算机托管多个服务器实例时很有用),无论shell脚本实际从何处被调用。在不更改脚本中的当前目录的情况下,只有在用户记得在运行脚本之前手动cd
进入相应目录时,它才能正常工作。
在这种情况下,从脚本中执行cd
操作会从服务器启动/关闭过程中删除一个手动步骤,从而使事情稍微不那么容易出错。
与大多数事情一样,这类事情有合法用途。而且我确信也有一些值得怀疑的问题。这实际上取决于最适合您具体用例的内容。这是我无法评论的......我总是让maven
为我建立我的JAR。