4

マニュアルによると、chdir、可能であれば、作業ディレクトリをに変更しEXPRます。

このスクリプトは、cmd.exeから実行すると次のようになります。

my $path = 'C:\\some\\path\\';
print "$path\n";
chdir("$path") or die "fail $!";

結果は次のようになります。

C:\some\path\

しかし、コマンドプロンプトに戻ったとき、私はまだ元のディレクトリにいます。chdirの目的を誤解していますか?

4

3 に答える 3

7

PerlスクリプトのFAQI{ディレクトリを変更し、環境を変更しました}を参照してください。スクリプトを終了したときに変更が消えたのはなぜですか?変更を表示するにはどうすればよいですか?

厳密には、それを実行することはできません。スクリプトは、開始元のシェルとは異なるプロセスとして実行されます。プロセスへの変更は、その親には反映されません。変更後に作成された子にのみ反映されます。

同じ答えがWindowsにも当てはまります。

cmd.exeショートカットやレジストリをいじることで、後続の呼び出しや子プロセスの開始ディレクトリを変更できます。

于 2010-03-08T22:55:47.397 に答える
6

シェルがプログラムを実行すると、基本的にプログラムをフォークして実行します。この場合は、perlスクリプトです。そのフォークされたプロセス内のディレクトリが変更された後、そのプロセスは終了します。その後、元のシェルプロセスに戻ります。

于 2010-03-08T22:25:48.360 に答える
1

-xperlスイッチを使用してファイルに埋め込まれた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$ENV{TMPBAT}は、 1)存在しない場合、または2)ソーススクリプトよりも古い場合にDOSコマンドを書き込むモジュールです。

于 2010-03-09T05:55:41.267 に答える