Perl 如何在WinCvs中当前工作目录之外执行命令?

Perl 如何在WinCvs中当前工作目录之外执行命令?,perl,command,cvs,chdir,wincvs,Perl,Command,Cvs,Chdir,Wincvs,我正在使用Perl包装器在WinCvs中执行命令。我无法找到一种方法来执行Cvs命令,而不对您希望在其上执行命令的目录执行chdir 这非常烦人,因为这意味着每当我想在perl脚本中使用Cvs做任何事情时,我都需要获取当前工作目录,将目录更改为Cvs路径,执行我的命令,然后将目录更改回原始工作目录 是否有方法将路径传递给Cvs命令,以便您可以在当前不在的目录上发出命令 例如,如果我的Perl脚本中的当前工作目录是C:\test\,并且我想在C:\some\u other\u目录上执行Cvsupd

我正在使用Perl包装器在WinCvs中执行命令。我无法找到一种方法来执行Cvs命令,而不对您希望在其上执行命令的目录执行
chdir

这非常烦人,因为这意味着每当我想在perl脚本中使用Cvs做任何事情时,我都需要获取当前工作目录,将目录更改为Cvs路径,执行我的命令,然后将目录更改回原始工作目录

是否有方法将路径传递给Cvs命令,以便您可以在当前不在的目录上发出命令

例如,如果我的Perl脚本中的当前工作目录是
C:\test\
,并且我想在
C:\some\u other\u目录
上执行Cvs
update
命令,那么我如何执行该命令而不首先执行
chdir
C:\some\u other\u目录

当前如何执行该命令的示例:

#!/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\u other\u directory”直接传递给Cvs命令,并消除所有这些
chdir
废话…

另一种方法是在一个系统调用中调用多个命令:

system("cd C:\some_other_directory && cvs update");

另一种方法是在单个系统调用中调用多个命令:

system("cd C:\some_other_directory && cvs update");

弗拉维奥的答案是可行的,但我也找到了另一种解决方案。它允许您更改目录以发出命令,但比使用
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

弗拉维奥的答案是可行的,但我也找到了另一种解决方案。它允许您更改目录以发出命令,但比使用
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

您可以尝试使用系统“cvs C:\some_other_directory\update”;我试过了,没用。它给你一个“未知命令”错误。不确定我是怎么得到a-1的,问题和我的目标都很清楚。。。但是,你可以尝试使用系统“cvs C:\some_other_directory\update”;我试过了,没用。它给你一个“未知命令”错误。不确定我是怎么得到a-1的,问题和我的目标都很清楚。。。但是哦,好吧。