Как вы можете выполнить команду за пределами вашего текущего рабочего каталога в WinCvs?

Я работаю над оболочкой Perl для выполнения команд в WinCvs. Я не смог найти способ выполнять команды Cvs без выполнения chdir в каталог, в котором вы хотите выполнить команду.

Это очень раздражает, потому что это означает, что каждый раз, когда я хочу что-либо сделать с Cvs в скрипте perl, мне нужно получить текущий рабочий каталог, изменить каталоги на путь Cvs, выполнить мою команду, а затем изменить каталоги обратно на исходную рабочую каталог.

Есть ли способ передать путь к команде Cvs, чтобы вы могли выполнить команду в каталоге, в котором вы в данный момент не находитесь?

Например, если мой текущий рабочий каталог в моем скрипте Perl C:\test\ и я хочу выполнить резюме update команда на C:\some_other_directory как я могу выполнить эту команду, не делая 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 ерунда...

2 ответа

Решение

Другой способ сделать это - вызвать несколько команд в одном системном вызове:

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

Ответ Флавио работает, но я также нашел это альтернативное решение. Это позволяет вам изменять каталоги для выдачи команды, но это менее опасно, чем использование 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
Другие вопросы по тегам