Выполнение команды оболочки из perl-скрипта
Изучаю perl, решил написать небольшой скриптик для личных нужд. Среди прочего, скрипт должен выполнить переход в указанную папку и запустить там приложение. Проблема пока возникла именно с переходом в папку.
Пытался сделать так:
my $fld="/home/user/work/folder";
my $cdm="cd $fld";
system($cdm);
При выполнении скрипта получаю сообщение, что нет такой папки.
Подскажите, с чем это может быть связано? Папка точно существует.
Ответы (2 шт):
my $cdm="cd $fld"; system($cdm); это исполняется не в вашем процессе. есть chdir().
cd -- внутренняя команда оболочки, поэтому ваш system() скорее всего вызовет bash -c $cdm. bash изменит каталог у себя, но у вашего процесса останется прежний.
По прочтении perldoc -f system оказалось, что перловый system() делает не то же самое, что сишный, и поведение его зависит от передаваемого аргумента.
В случае автора вопроса шелл не запускается, а делается fork()+exec("cd") по каждому элементу $PATH. exec("cd") обламывается, т.к. такой программы в пути действительно нет. Выдаётся сообщение Can't exec "cd": Нет такого файла или каталога at ./test.pl line 4, неверно интерпретированное автором как сообщение об отсутствии целевого каталога.