Как вы можете выполнить команду за пределами вашего текущего рабочего каталога в 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