【问题标题】:Perl chdir errorPerl chdir 错误
【发布时间】:2011-10-24 12:03:56
【问题描述】:

我正在尝试在 UNIX 中使用 Perl 更改工作目录(用于配置 WebShpere MQ 队列管理器)。

我必须转到目录/var/mqm/qmgrs/Q\!MAN,并且我使用了以下代码sn-p:

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

但它不会更改目录并死给

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

当我删除变量 $QueueManagerPathName 时,它工作正常,我得出结论认为使用 "\!" 部分会出错。

【问题讨论】:

    标签: perl unix chdir


    【解决方案1】:

    您无需在目录名称中转义 !。这应该有效:

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

    【讨论】:

    • 非常感谢。我用 UNIX shell 表示误解了它。使用$QueueManagerPathName = 'Q!MAN'; 效果很好。再次感谢您
    • 如果你将字符串传递给 shell(例如使用 'system' 或反引号)你会需要这个,但 'chdir' 在 Perl 中是原生的。
    • @Colin: system("ls !test/*")print `ls !test/*` 也可以工作
    • 哦,是吗?我以为 shell 会解释它。
    【解决方案2】:

    单引号字符串不插入反斜杠,因此您尝试切换到名为 /var/mqm/qmgrs/Q\!MAN 的目录

    要么省略反斜杠,要么使用双引号字符串。

    【讨论】:

      【解决方案3】:

      你的变量中有一个反斜杠......我会说你正在做很多转义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多