通过反引号执行perl 3或4行命令

时间:2016-04-30 11:37:42

标签: perl ubuntu terminal

如何使用此代码创建更多命令。目前的版本是2.如何做3或4或更多?

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

用户DVK回答原始问题:

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

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

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

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

1 个答案:

答案 0 :(得分:5)

您引用的行包含一个管道连接的命令行。那不是运行多个命令。

您考虑使用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命令的参数传递。

这个答案中有很多常见的东西:请在你的问题中更详细一些,以便得到更好的回复。