Shell:具有超时的命令,获得输出

时间:2014-01-07 12:14:44

标签: shell timeout output

问题是我想从un archive tar文件中的'Institution'文件中获取一些信息(这很大并且需要时间解压缩),所以我尝试这样的命令:

timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar

0.5秒就够了,所以速度要快得多......

问题是当我在cygwin提示符中直接执行命令时,它会打印结果,但是当我在shell文件中尝试它时:

output=`timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar` 
echo $output

或者在提示中执行如下:

`timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar > output.txt`

我什么也得不到,有没有办法得到结果,因为我需要在之后操作结果。 谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的目标是在找到所需的行后立即停止扫描存档,请明确退出awk命令,而不是依赖任意超时来终止命令。我怀疑你可能遇到缓冲问题。

output=$( awk '/FormattedDescription/ { getline; print; exit; }' archivage001.1.tar )

抓住一组有界线

output=$( awk '/PinnInstitutionPath/ {start=1};
               start {print};
               /MountPointList/ {exit}' archivage001.1.tar )