我敢肯定,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~
不过,您可能想要在其中添加睡眠。