我正在开发一个Perl包装器,以在WinCvs中执行命令。如果不对您希望执行命令的目录执行chdir,我就无法找到执行Cvs命令的方法。
这非常恼人,因为这意味着每当我想在perl脚本中处理Cvs时,我都需要获取当前的工作目录,将目录更改为Cvs路径,执行我的命令,然后将目录更改回原来的工作目录。
是否有方法将路径传递给Cvs命令,以便在当前不在的目录上发出命令?
例如,如果我的Perl脚本中的当前工作目录是C:\test\,并且我希望在C:\some_other_directory上执行Cvs update命令,那么我如何才能执行该命令而不首先对C:\some_other_directory执行chdir?
当前如何执行命令的示例:
#!/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的废话.
发布于 2015-06-18 13:33:49
Flavio的答案有效,但我也找到了这个替代的解决方案。它允许您更改目录以发出命令,但不像使用chdir那么危险,也不太可能让您对脚本在任何给定时间可能位于哪个目录感到困惑。
模块档案::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发布于 2015-06-11 21:28:50
另一种方法是在一个系统调用中调用多个命令:
system("cd C:\some_other_directory && cvs update");https://stackoverflow.com/questions/30785657
复制相似问题