【问题标题】:Perl script that invokes shell command doesn't work调用 shell 命令的 Perl 脚本不起作用
【发布时间】:2015-04-18 19:53:40
【问题描述】:

我正在编写一个简单的 Perl 程序来测试用于更改目录的 shell 脚本。但它不起作用。

这是我的代码:

$result = `cd/`;
print $result;  

当我使用它时效果很好

$result =`dir`;

【问题讨论】:

  • 您需要比“不起作用”更具体。你有错误吗?你能告诉我们预期的和实际的输出吗?
  • `cd /` 不是 `cd/`
  • Perl 的问题是有时如果出现错误,它不会打印出来。而是等待下一个命令。所以我不确定。但我预计我的程序会更改目录,但它没有。
  • 即使 `cd /` 也无济于事。

标签: perl shell


【解决方案1】:

如果您需要更改脚本中的 cwd 目录,那么您应该使用 Perl 的内置 chdir 函数。 perldoc -f chdir

【讨论】:

    【解决方案2】:

    cd(默认情况下)不输出任何内容,因此您将 空字符串 分配给您的 $result 变量。

    如果您想输出您更改到的目录的(完整)路径,只需在反引号内附加&& pwd

     $result = `cd / && pwd`;
    

    请注意,`...` 创建了一个子进程,用于使用指定的命令运行 shell,因此无论您在其中执行什么环境更改(包括更改目录),都不会影响 Perl 脚本本身。

    换句话说:你没有用你的 shell 命令改变 Perl 脚本的当前目录。


    如果您的意图是:

    • 简单地测试你在`...`中的shell命令是否成功成功,使用system() function代替;例如:

          system('cd /') == 0 || die "Command failed";
      
    • 捕获 shell 命令的输出,假设它是一个目录路径和 change the Perl script's working directory

          $result = `cd / && pwd` || die "Command failed.";
          chomp $result; # trim trailing newline
      
          # Change Perl script's working dir.
          chdir $result || die "Could not change to $result.";
      

    【讨论】:

      【解决方案3】:

      要影响perl进程的当前工作目录,请使用chdir()函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多