【问题标题】:perl 3 or 4 line commands via backticksperl 通过反引号的 3 或 4 行命令
【发布时间】:2016-04-30 11:37:42
【问题描述】:

如何使用此代码创建更多命令。当前版本是2。我怎么能做3或4或更多?

my $startprocess = `(echo "y" | nohup myprocess) &`

用户DVK回答的原始问题:

Can I execute a multiline command in Perl's backticks?

编辑:感谢塞巴斯蒂安的回复。 我必须在一行中运行所有内容,因为我在终端中运行一个程序并且我想发出渐进式命令。

例如命令 1 启动程序。命令 2 将我导航到菜单。命令 3 让我更改设置。命令 4 让我发出一个命令,提示我只能在该新设置的条件下获得响应。

运行多个命令会让我陷入第一步。

【问题讨论】:

    标签: perl ubuntu terminal


    【解决方案1】:

    您引用的行包含一个通过管道传输的命令行。这不是运行多个命令。

    您是否考虑过使用open

    my $pid = open my $fh, '-|', 'myprocess';
    print $fh "y\n";
    

    不需要在一行(反引号)中运行多个命令,为什么不使用多个?

    $first = `whoami`;
    $second = `uptime`;
    $third = `date`;
    

    反引号用于捕获命令的输出,system 只是运行命令并返回退出状态:

    system '(echo "y" | nohup myprocess) &';
    

    所有解决方案都允许将多个命令通过管道连接在一起,因为这是一个 shell 功能,所有命令只是将命令字符串传递给 shell(除非它足够简单,无需 shell 即可处理):

    重击:

    $ ps axu|grep '0:00'|sort|uniq -c|wc
    

    Perl:

    system "ps axu|grep '0:00'|sort|uniq -c|wc";
    $result = `ps axu|grep '0:00'|sort|uniq -c|wc`;
    open my $fh, '|-', "ps axu|grep '0:00'|sort|uniq -c|wc";
    

    始终注意引号:system "foo "bar" baz"; 不会将 "bar" baz 作为参数传递给 foo 命令。

    此答案中有很多常见内容:请在您的问题中更详细地获得更好的答复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多