根据手册chdir,如果可能,将工作目录更改为EXPR
。
此脚本从cmd.exe执行时执行:
my $path = 'C:\\some\\path\\';
print "$path\n";
chdir("$path") or die "fail $!";
导致此输出:
C:\some\path\
但是当我返回到命令提示符时 - 我仍然在原始目录中。我误解了chdir的目的吗?
答案 0 :(得分:7)
从最严格的意义上说,它无法完成 - 脚本作为与它从启动的shell不同的进程执行。对进程的更改不会反映在更改后创建的任何子级中的父级中。
同样的答案也适用于Windows。
您可以通过弄乱快捷方式和/或注册表来修改后续cmd.exe
调用或子进程的起始目录。
答案 1 :(得分:6)
当一个shell运行一个程序时,它实际上是forks然后执行该程序 - 在本例中是你的perl脚本。该分叉进程中的目录已更改,然后该进程终止。然后,您将返回到原始shell进程。
答案 2 :(得分:1)
我通过使用perl -x
开关在文件中嵌入执行Perl代码来更改目录和命令环境。
@rem = '--*-Perl-*--'
@echo off
set TMPBAT=%TMP%\%0_temp.bat
perl -x -S %0 %*
if %errorlevel% == 2000 goto cleanup
goto endofperl
#!perl
#line 9
use strict;
use warnings;
use BatchTool;
__END__
:endofperl
if exist %TMPBAT% call %TMPBAT%
:cleanup
set TMPBAT=
BatchTool
是一个将DOS命令写入$ENV{TMPBAT}
的模块,如果1)它不存在或2)比源脚本旧。