【问题标题】:How can I get return value when using awk in perl script?在 perl 脚本中使用 awk 时如何获取返回值?
【发布时间】:2011-07-21 22:09:21
【问题描述】:

我正在尝试将这个系统调用的结果提交给$process

my $process= system "adb shell ps | egrep adb | awk '{print $1}' ";

但是当print " $process \n";我得到零时

任何建议

【问题讨论】:

    标签: perl awk command system adb


    【解决方案1】:

    我认为 perl 在您使用 system() 调用时不会捕获输出。

    尝试用反引号代替:

    my $process = `adb shell ps | egrep adb | awk '{print $1}'`;
    

    【讨论】:

    • 如果你在 shell 提示符下运行该命令,它会给你什么?
    • 当我在我的 ubuntu 机器上运行它时,我已经获得了 root
    • 然后尝试 2 美元,而不是 1 美元。听起来它给你的是进程所有者而不是进程 ID。
    • 解决方法是像这样在没有系统的情况下调用adb shell ps | egrep adb | awk '{print \$2}'
    【解决方案2】:

    system()的返回值是程序的退出状态(here)。改用反引号操作:

    $process = `...`;
    

    【讨论】:

    • 好吧,看起来 $process 在不考虑 awk 的情况下得到 egrep adb 结果
    • 所以当我调用我的 $process= adb shell ps | egrep adb | awk '{print \$1} 时,我已经得到了我需要的东西,谢谢
    【解决方案3】:

    我刚刚找到了关于 SO 本身的更详细的解释。编辑以添加该链接 - What's the difference between Perl's backticks, system, and exec?


    pmod 提到的是正确的。由于我最近一直在阅读这方面的内容,因此只需在我发现的内容中添加评论:

    system
    

    执行一个命令并且你的 perl 脚本在命令完成后继续。它返回命令的退出状态。

    backticks - ` `
    

    这有点像系统,执行您启动的命令并等待它返回。但是,与系统不同,它为命令返回 STDOUT。我想这就是你在这里寻找的东西。

    exec
    

    用新进程替换当前进程并且不返回任何内容。

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 2012-05-30
      相关资源
      最近更新 更多