2012-01-10 2 views
0

Мне нужно получить файл файла примера из команды find в скрипте Perl для последующего создания системного вызова. По какой-то причине команда find застревает, когда я вызываю ее из скрипта. Вот то, что мне нужно сделать:синтаксический анализ первой записи поиска в perl?

my $search_dir = "/something/like/this/??/??/??"; 
# the triple '??' are needed here 
my $cmd = "find $search_dir -name \"\*.$var1.token1.$var2.ext\" | head -n 1"; 
my $first_example_file = `$cmd`; chomp $first_example_file; 

Это застревает, когда я запускаю его через Perl, он никогда не заканчивает выполнение команды, в то время как построен $ CMD работает в кратчайшие сроки, если скопировать + вставить его и запустить в в моем баш-терминале. Есть идеи?

+0

Что вы подразумеваете под "застревает", точно? –

+0

никогда не завершает выполнение команды – 719016

+0

Попробуйте выполнить '$ cmd' непосредственно из командной строки. –

ответ

5

Попробуйте использовать perl-модуль File::Find для поиска файлов. Если вы хотите использовать bash's find в своем perl, то вам, возможно, придется использовать $(..) в вашей команде.

Я не в perl ... просто пытаюсь помочь.

Update:

Как указано в комментариях по Rohaq вы можете также использовать File::Find::Rule

+1

Файл :: Найти хороший, хотя я предпочитаю File :: Find :: Правило для настройки поиска перед их запуском. Ссылка: http://search.cpan.org /~rclamp/File-Find-Rule-0.33/lib/File/Find/Rule.pm – Rohaq

+0

Спасибо @Rohaq ... добавили ваше предложение в ответ. Надеюсь, что все в порядке –

+0

Все хорошо, ура! – Rohaq

1

Держу пари, подстановка (расширение метасимволом оболочки) участвует. Но, несмотря на это, попробуйте и отрубите команду. Работает ли он без трубы? Как насчет без? в пути? Что произойдет, если вы добавите «эхо» («echo find ...»)? Все еще висит? Затем вы можете попробовать его в perl -d - отладчике; perldoc perldebug - ваш друг.

Смежные вопросы