Это запутанный вопрос, так что потерпите меня. У меня есть сценарий Perl, который находится в гостевой системе Windows VirtualBox. Я хочу вызвать этот скрипт с хоста Linux и заставить его читать общую папку с хоста. Чтение папки не удается.
На хосте я вызываю этот скрипт, и он дает мне следующий результат:
host:~/$ ./script.pl /nfs/nasi/temp
[2014-04-02 10:50:55] Uploading file records to localhost
[2014-04-02 10:50:55] Running VirtualBox for Kaspersky
fatal: opendir(E:\nasi\temp) failed: No such file or directory
[2014-04-02 10:50:56] Uploading malware samples data to localhost
host:$
Скрипт преобразует аргумент /nfs/nasi/temp
в E:\nasi\temp
и вызывает скрипт с помощью следующей команды:
/usr/bin/VBoxManage guestcontrol <guest> execute \
--image "C:\strawberry\perl\bin \perl.exe" \
--username <user> --password <pass> \
--wait-stdout --wait-stderr --wait-exit -- \
"C:\antivirus\kaspersky.pl" "E:\nasi\temp"
Когда я запускаю этот же скрипт, используя ту же опцию от гостя напрямую, я получаю следующее:
C:\antivirus>C:\strawberry\perl\bin\perl.exe C:\antivirus\kaspersky.pl E:\nasi\temp
[2014-04-02 10:54:19] Running Kaspersky Antivirus
[2014-04-02 10:54:20] Parsing Kaspersky report
[2014-04-02 10:54:20] Uploading Kaspersky results to 10.0.0.1
C:\antivirus>
Но подождите, дальше будет еще страннее. Когда вместо предоставления общего каталога E:\
я вместо этого указываю ему C:\
, у него нет проблем с чтением каталога, и он просто счастливо продолжает работу. Таким образом, ошибка появляется только тогда, когда я запускаю команду с хоста через VirtualBox и указываю ее на общий ресурс.
Вот соответствующий код:
sub createSamplesMap {
opendir( my $dh, $ARGV[0] ) or
die "fatal: opendir($ARGV[0]) failed: $!\n";
my @files = readdir( $dh );
foreach my $file ( @files ) {
if (! -d $file ) {
...
}
}
closedir($dh);
}
Я пробовал разные способы чтения имен файлов из каталога, но они не работали. Вот что я пробовал.
my @files = <$ARGV[0]\\*>;
my @files = glob( $ARGV[0] . '\\*' );
Я не знаю, виноват ли перл или виртуальный бокс. У кого-нибудь есть идеи, в чем может быть проблема?
- Windows 7, Strawberry Perl v5.18.2
- Ubuntu 12.04.04, Перл v5.14.2
- Виртуалбокс 4.2.16r86992
кросспост: https://forums.virtualbox.org/viewtopic.php?f=2&t=61011
C:\strawberry\perl\bin
и\perl.exe
? - person mob   schedule 02.04.2014