Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 从shell命令捕获输出,而不[同时]将其输出发送到stdout_Unix_Perl - Fatal编程技术网

Unix 从shell命令捕获输出,而不[同时]将其输出发送到stdout

Unix 从shell命令捕获输出,而不[同时]将其输出发送到stdout,unix,perl,Unix,Perl,我正在编写一个Perl程序来获取特定文件的修改时间。我尝试了以下场景: $time=system(“stat-c%y temp.txt”)-->这将$time设置为“0”,并将“2013-04-03 06:10:02.000000000-0600”写入标准输出 $time=`stat-c%y temp.txt`-->这将$time设置为“2013-04-03 06:10:02.000000000-0600”,并在标准输出上显示相同的内容(“2013-04-03 06:10:02.00000000

我正在编写一个Perl程序来获取特定文件的修改时间。我尝试了以下场景:

  • $time=system(“stat-c%y temp.txt”)
    -->这将$time设置为“0”,并将“2013-04-03 06:10:02.000000000-0600”写入标准输出

  • $time=`stat-c%y temp.txt`
    -->这将$time设置为“2013-04-03 06:10:02.000000000-0600”,并在标准输出上显示相同的内容(“2013-04-03 06:10:02.000000000-0600”)

  • $time=exec(“stat-c%y temp.txt”)
    -->这不设置$time,而是在标准输出上打印“2013-04-03 06:10:02.000000000-0600”


  • 由于这会一次又一次地用相同类型的数据淹没我的stdout,所以我想摆脱它。有人能帮我吗?

    您最好使用perl内置的
    stat
    函数:

    @st = stat('temp.txt'); 或者只是得到一个像这样的可打印字符串

    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($st[9]); $time = localtime($st[9]); $time=localtime($st[9]); 反勾号(以及相关的
    qx
    运算符或
    readpipe
    函数)不会在标准输出上写入任何输出;它们执行一个命令,捕获命令的输出并返回它(通常是将它分配给某个变量)。所以


    将设置
    $time
    ,并且不会将任何内容写入标准输出。命令可以将某些内容写入标准错误,但从您描述的症状来看,情况并非如此。

    将o/p重定向到
    /dev/null
    。类似于
    /script>/dev/null
    那么
    $time=exec(“stat-c%y temp.txt 2>/dev/null”)
    呢?这是否有效?仅供参考,
    system()
    的返回值可能是命令的退出状态(成功时通常为零,失败时为非零)。
    $time = `stat -c %y temp.txt`