我有一个名为的脚本my_bash.sh
,它调用了perl脚本,并将perl脚本的输出附加到日志文件中。仅在perl脚本完成后才写入文件吗?
my_bash.sh
#!/bin/bash
echo "Starting!" > "my_log.log"
perl my_perl.pl >> "my_log.log" 2>&1
echo "Ending!" >> "my_log.log"
问题是,随着perl脚本的运行,我想在my_log.log
文件运行时对其内容进行操作,但是文件似乎是空白的。有适当的方法来做到这一点吗?如果您需要更多信息,请告诉我。
my_perl.pl
...
foreach $component (@arrayOfComponents)
{
print "Component Name: $component (MORE_INFO)\n";
# Do some work to gather more info (including other prints)
#...
# I want to replace "MORE_INFO" above with what I've calculated here
system("sed 's/MORE_INFO/$moreInfo/' my_log.log");
}
在sed
因为工作不正常print
的语句还没有去到了my_log.log
。
Perl默认会缓冲输出。要禁用缓冲,请将其设置$|
为非零值。添加
$|++;
在您的perl脚本的顶部。
$|
如果设置为非零,则在当前选定的输出通道上每次写入或打印后立即强制执行刷新。默认值为0(无论通道是否真正被系统缓冲;
$|
仅告诉您是否在每次写操作后都明确要求Perl刷新)。STDOUT
如果输出到终端,通常将被行缓冲,否则将被块缓冲。设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望看到正在发生的输出时。这对输入缓冲没有影响。参见getc。请参阅选择如何选择输出通道。另请参见IO :: Handle。助记符:当您希望管道变热时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句