Unix 从shell命令捕获输出,而不[同时]将其输出发送到stdout
我正在编写一个Perl程序来获取特定文件的修改时间。我尝试了以下场景: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
$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`