2016-08-03 10 views
-1

У меня есть скрипт Perl, который выполняется в командной строке Cygwin. Он вызывает командный файл для создания и монтирования виртуального диска (VHD-файла). После того, как он установлен, скрипт Perl пытается получить доступ к новому диску, но сбой, и сообщает, что каталог не найден. мой сценарий выглядит следующим образом:перезагрузить список дискового раздела в скрипте Perl

(...) 
system ("create_mount_G_disk.bat"); 
# G:\ mounted 
if (-d "G:") die "G: not found"; 
(...) 

Я полагаю, что здесь Perl кэширует в сценарий запуска, список диска, и именно поэтому он failes для доступа к новому каталогу. Есть ли способ перезагрузить кеш во время выполнения?

Я был бы рад за любую помощь! спасибо :)

+0

Создать [минимальный, полный, проверяемый пример] (https://stackoverflow.com/help/mcve). –

ответ

0

В cygwin попробуйте /cygdrive/g, чтобы обратиться к G:. Возможно, вам также повезло бы сказать G:/, а не только G:.

+0

Фактически сценарий работает, когда я снова его перезаряжаю. Это означает, что строка , если (-d "G: /") умирает ".." не будет сигнализировать об ошибке во второй попытке. Вот почему я предполагаю, что Perl кэширует диски где-то .. – Heisenberg

0

В коде, который вы не показываете, есть что-то еще. Вот то, что я получаю в окне Баш Cygwin на моем Windows 10 Pro ноутбук:

$ perl -E 'say "yes" if -d "C:"' 
$ 

, который следует ожидать, поскольку C: не является каталогом.

С другой стороны,

$ perl -E 'say "yes" if -d "C:\\"' 
yes 
$ 

и

$ perl -E 'say "yes" if -d "C:/"' 
yes 
$ 

Кроме того,

if (-d "G:") die "G: not found"; 

Это не Perl и ваша обратная логика.

Try:

unless (-d 'G:/') { 
    die 'G: not found'; 
}