我正在开发一个Perl包装器来执行WinCvs中的命令。 我一直无法找到一种在不chdir
要执行命令的目录的情况下执行 Cvs 命令的方法。
这很烦人,因为这意味着每次我想在perl脚本中使用Cvs做任何事情时,我都需要获取当前工作目录,将目录更改为Cvs路径,执行我的命令,然后将目录更改回原始工作目录。
有没有办法将路径传递给 Cvs 命令,以便您可以在当前不在的目录上发出命令?
例如,如果我在Perl脚本中的当前工作目录是C:test
,并且我想在C:some_other_directory
上执行Cvs update
命令,那么如何在不先chdir
C:some_other_directory
的情况下执行该命令?
我当前如何执行命令的示例:
#!/usr/bin/perl
use strict;
use warnings;
use Cwd;
my $cwd = cwd();
chdir "C:some_other_directory" or die $!;
system 'cvs update';
chdir $cwd or die $!;
我想要的是找到一种方法,能够直接将"C:\some_other_directory"传递给 Cvs 命令,并摆脱所有这些chdir
废话......
Flavio 的答案有效,但我也找到了这个替代解决方案。 它允许您更改目录以发出命令,但比使用chdir
危险性小,并且不太可能让您对脚本在任何给定时间可能位于哪个目录中感到困惑。
模块File::Chdir可以很容易地解决问题:
use File::Chdir;
# Set the current working directory
$CWD = '/foo/bar/baz';
# Locally scope this section
{
local $CWD = '/some/other/directory';
# Updates /some/other/directory
system 'cvs update';
}
# current working directory is still /foo/bar/baz
另一种方法是在单个系统调用中调用多个命令:
system("cd C:some_other_directory && cvs update");