当前位置:  开发笔记 > 编程语言 > 正文

更改脚本中的工作目录的最佳做法是什么?

如何解决《更改脚本中的工作目录的最佳做法是什么?》经验,为你挑选了2个好方法。

你认为在bash或Perl脚本中更改目录是可以接受的吗?或者应该不惜一切代价避免这样做?

这个问题的最佳做法是什么?



1> Schwern..:

就像Hugo说的那样,你无法影响父进程的cwd,所以没有问题.

如果您不控制整个过程,例如子程序或模块,则问题更适用.在这些情况下,您希望退出与您输入的目录相同的子程序,否则微妙的远程动作会导致错误.

你可以手工制作......

use Cwd;
sub foo {
    my $orig_cwd = cwd;
    chdir "some/dir";

    ...do some work...

    chdir $orig_cwd;
}

但那有问题.如果子程序提前返回或死亡(并且异常被捕获),您的代码仍然会存在some/dir.此外,chdirs可能会失败,你必须记住检查每次使用.的Bleh.

幸运的是,有几个模块可以让这更容易.File :: pushd是一个,但我更喜欢File :: chdir.

use File::chdir;
sub foo {
    local $CWD = 'some/dir';

    ...do some work...
}

File :: chdir使目录更改为分配$CWD.并且您可以进行本地化,$CWD以便在范围的最后重置,无论如何.它还会自动检查是否chdir成功,否则抛出异常.有时它会在脚本中使用它,因为它非常方便.



2> Hugo..:

当前工作目录是执行shell的本地目录,因此除非他是"点"(在当前shell中运行它,而不是正常运行它创建新的shell进程),否则不能影响用户.

这样做的一个很好的方法是使用子shell,我经常用别名来做.

alias build-product1='(cd $working-copy/delivery; mvn package;)'

该paranthesis将确保从子shell执行该命令,因此不会影响我的shell的工作目录.它也不会影响last-working-directory,所以cd - ; 按预期工作.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有