您应该更改shell脚本中的当前目录吗?

时间:2012-05-28 23:07:24

标签: bash shell jar sh working-directory

我总是在心理上将当前目录视为用户而不是脚本,因为它取决于用户的位置,并且每次执行脚本时都可能不同。

所以当我遇到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无法使用,因为它只适用于下一个立即参数。

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

在脚本中使用当前目录有什么缺点吗?是不是因为某些原因而不赞成?

1 个答案:

答案 0 :(得分:1)

我认为从shell脚本更改当前目录没有任何内在错误。当然,如果单独使用它不会导致任何不好的事情发生。

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

cd `dirname $0`

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

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

与大多数事情一样,这类事情有合法用途。而且我确信也有一些值得怀疑的问题。这实际上取决于最适合您具体用例的内容。这是我无法评论的......我总是让maven为我建立我的JAR。