1

我正在研究 Perl 包装器以在 WinCvs 中执行命令。chdir如果不对您希望在其上执行命令的目录执行操作,我一直无法找到执行 Cvs 命令的方法。

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

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

例如,如果我的 Perl 脚本中的当前工作目录是C:\test\并且我想执行一个 Cvsupdate命令,C:\some_other_directory那么如何在不先执行chdirto的情况下执行该命令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废话的方法......

4

2 回答 2

2

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

system("cd C:\some_other_directory && cvs update");
于 2015-06-11T21:28:50.690 回答
2

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
于 2015-06-18T13:33:49.570 回答