我一直认为当前目录是供用户使用的,而不是脚本,因为它依赖于用户的位置,并且每次执行脚本时可能会有所不同。因此,当我遇到Java jar工具的-C选项时,有些困惑。
对于那些不知道的人,-C选项用于在指定要包含在jar文件中的文件/文件夹之前使用。由于文件/文件夹的路径在jar文件中被复制,所以-C选项在包含文件之前更改目录:
换句话说:
对于那些不知道的人,-C选项用于在指定要包含在jar文件中的文件/文件夹之前使用。由于文件/文件夹的路径在jar文件中被复制,所以-C选项在包含文件之前更改目录:
换句话说:
jar -C flower lily.class
将创建一个包含 lily.class
文件的 jar 包,而:
jar flower/lily.class
将在jar文件中创建一个名为flower
的文件夹,其中包含lily.class
。
对于我正在制作的jar-ing脚本,我想使用Bourne通配符folder/*
,但这会使得使用-C
变得不可能,因为它只适用于下一个立即参数。
因此,唯一可以使用通配符的方法是从当前目录运行;但我仍然对在脚本中更改和使用当前目录感到不安。
在脚本中使用当前目录有什么缺点吗?也许因为某种原因而被反感了吗?
cd
是局限于子进程的。试试这个命令:pwd; (cd ..; pwd); pwd
,你会发现当你退出子shell(由括号表示)时,当前目录回到了开始的位置。无论脚本做什么(除非你使用source
而不是执行它),对用户来说都没有影响。 - Amadangoto
语句是一种可怕的东西,因为它是无限制的,早期的程序设计中就是这样。你可以从一个子程序跳到另一个子程序,这会破坏环境并对后来阅读代码的人造成严重的脑损伤。但在特定情况下使用它们是完全可以接受的。有趣的是,它们被接受的情况几乎完美地与可以使用异常的地方相吻合(这保留了程序的层次结构)。你可以注意到这里发生的同样的事情 -cd
命令不能影响超级进程,而子进程是你自己的责任。 - Amadantar -C dirname
和find -execdir
。 - Dennis Williamsongoto
很有趣,因为在汇编语言中,由于没有循环,你基本上只能使用goto
来控制流程。 - Hawken