我敢肯定,perl,ruby,bash有一些琐碎的单行代码,无论哪种方式,它都会让我循环运行命令,直到在stdout中观察到一些字符串,然后停止。理想情况下,我也希望捕获stdout,但是如果要进行控制台操作,这可能就足够了。

目前有问题的特定环境是RedHat Linux,但有时在Mac上也需要同样的东西。因此,通用和* nixy最好。不在乎Windows-可能在cygwin下可以处理*很多东西。

更新:请注意,“观察某些字符串”是指“stdout包含某些字符串”,而不是“stdout是某些字符串”。

最佳答案

在Perl中:

#!/usr/local/bin/perl -w

if (@ARGV != 2)
{
    print "Usage: watchit.pl <cmd> <str>\n";
    exit(1);
}

$cmd = $ARGV[0];
$str = $ARGV[1];

while (1)
{
    my $output = `$cmd`;
    print $output; # or dump to file if desired
    if ($output =~ /$str/)
    {
        exit(0);
    }
}

例:
[bash$] ./watchit.pl ls stop
watchit.pl
watchit.pl~
watchit.pl
watchit.pl~
... # from another terminal type "touch stop"
stop
watchit.pl
watchit.pl~

不过,您可能想要在其中添加睡眠。

10-04 21:22