您认为在 bash 或 Perl 脚本中更改目录是否可以接受?还是应该不惜一切代价避免这样做?
这个问题的最佳做法是什么?
最佳答案
正如 Hugo 所说,您不能影响父进程的 cwd,所以没有问题。
问题更适用的地方是,如果您不控制整个过程,例如在子例程或模块中。在这些情况下,您希望在进入时所在的同一目录中退出子例程,否则细微的远距离 Action 会导致错误。
你可以手动...
use Cwd;
sub foo {
my $orig_cwd = cwd;
chdir "some/dir";
...do some work...
chdir $orig_cwd;
}
但这有问题。如果子例程提前返回或终止(并且异常被捕获),您的代码仍将位于 some/dir
中。此外,chdir
可能会失败,您必须记得检查每次使用。呸。
幸运的是,有几个模块可以使这更容易。 File::pushd 是一个,但我更喜欢 File::chdir .
use File::chdir;
sub foo {
local $CWD = 'some/dir';
...do some work...
}
File::chdir 使更改目录成为分配给 $CWD
。并且您可以本地化 $CWD
,因此它会在您的范围结束时重置,无论如何。它还会自动检查 chdir
是否成功,否则抛出异常。有时它会在脚本中使用它,因为它非常方便。
关于perl - 在脚本中更改工作目录的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240661/