2011-10-24 24 views
1

UNIXのPerlを使用して作業ディレクトリ(WebShpere MQキューマネージャを設定するため)を変更しようとしています。Perl chdirエラー

私はディレクトリ/var/mqm/qmgrs/Q\!MANに行かなければならないと、私は次のコードスニペットを使用している:

$QueueManagerPathName = 'Q\!MAN'; 
chdir('/var/mqm/qmgrs/'.$QueueManagerPathName) or die "Cannot change to dir : /var/mqm/qmgrs/".$QueueManagerPathName."\n"; 

をしかし、それはディレクトリを変更しないと、私は、変数$QueueManagerPathNameを削除すると

Cannot change to dir : /var/mqm/qmgrs/Q\!MAN 

を与えるダイスそのうまくいって、それは"\!"部分を使っている間違いであると私に結論づけます。

答えて

2

!をディレクトリ名にエスケープする必要はありません。これは動作するはずです:

my $dir = '/var/mqm/qmgrs/Q!MAN'; 
chdir $dir or die "Can't cd to $dir: $!\n"; 
+0

ありがとうございます。私はそれをUNIXのシェル表現で誤解しました。 '$ QueueManagerPathName = 'Q!MAN';を使ってうまくいきました。もう一度ありがとうございます – DarRay

+0

文字列をシェルに渡している場合(例えば、 'system'やbackticksを使って)、これは必要ですが、 'chdir'はPerlでネイティブです。 –

+0

@Colin: 'system(" ls!test/* ")'と 'print \' ls!test/* \ ''も同様に働く –

0

あなたの変数にバックスラッシュがあります...私はあなたが逃げようとしていると言いたいと思います。

2

シングルは、あなたがバックスラッシュを省略し、または二重引用符で囲まれた文字列を使用するかは/ var/MQM/qmgrs/Q \!のMAN

と呼ばれるディレクトリに変更しようとしているので、文字列は、バックスラッシュを補間していない引用されました。

関連する問題