小编Jen*_*ose的帖子

如何确定shell命令是否未运行或未生成输出

我正在通过perl脚本执行一些shell命令并捕获输出,如下所示,

$commandOutput = `cat /path/to/file | grep "some text"`;
Run Code Online (Sandbox Code Playgroud)

我还检查命令是否成功运行,如此

if(!$commandOutput)
{
    # command not run!
}
else
{
    # further processing
}
Run Code Online (Sandbox Code Playgroud)

这通常有效,我得到正确的输出.问题是,在某些情况下,命令本身不会产生任何输出.例如,有时我尝试的文本grep将不会出现在目标文件中,因此不会提供任何输出.在这种情况下,我的脚本将其检测为"命令未运行",而不是真的.

在perl中区分这两种情况的正确方法是什么?

unix shell perl

3
推荐指数
1
解决办法
3716
查看次数

无法在Perl中打开文本文件

我从另一台服务器获取一些日志文件(以txt格式)并尝试使用我的Perl脚本解析它们.正在正确获取日志,之后我为日志目录设置了777的权限.

在此之后,我尝试通过我的Perl脚本逐个打开日志文件进行解析.现在,奇怪的事情和发生的问题是,我的脚本有时能够打开文件,有时不能.简单来说,它无法打开日志文件进行解析.

此外,我已经完成了这个perl脚本,并且当它通过cron而不是手动运行时,文件打开失败的可能性更大,尽管它们在之前的两种情况下都已成功运行.我不明白问题出在哪里.

这是我用来打开文件的代码,

$inputDir = "/path/to/dir";
@inputFiles = <$inputDir/*>;

# inputFiles array is list of files in the log directory
foreach my $logFile(@inputFiles)
{
    # just to ensure file name is text
    $logFile = $logFile."";

    # process file only if filename contains "NOK"
    if(index($logFile,"NOK") > -1)
    {
        # opens the file
        open($ifile, '<', $logFile) or die "Error: Unable to open file for processing.";

        # file parsing takes place
    }
}

close($ifile);
Run Code Online (Sandbox Code Playgroud)

我想重新迭代这个代码已成功运行,我没有改变它的任何部分.但是,它不会每次都运行,因为它无法有时打开日志文件.有任何想法吗?

perl file-io

1
推荐指数
1
解决办法
3095
查看次数

计算两个日期之间的天数(不使用模块)

我搜索了很多,似乎所有解决方案都在使用某些模块或其他模块.

我有yyyymmdd格式的2个日期.我想知道一种简单的方法来计算这些日期之间的天数,而不使用任何模块.

示例:日期1:20130625日期2:20130705

天数= 10

PS:由于服务器的限制我不能使用任何模块我将运行脚本.Perl版本 - 5.8.4

perl date

-1
推荐指数
2
解决办法
2270
查看次数

标签 统计

perl ×3

date ×1

file-io ×1

shell ×1

unix ×1