我有以下命令从数据库下载文件,然后检查其完整性并退出:
cmd_db -get file_1
输出中:
Getting file_1
Transferring data (10% done)
Transferring data (20% done)
...
Transferring data (90% done)
Transferring data (100% done)
Getting MD5
ERROR: stream broke
Exiting...
文件正确下载但在错误发生后被删除。 当输出达到“100%完成”时,我设法手动终止命令。 手动检查MD5后,文件实际上很好。 我的连接有问题,我已经花了好几天试图解决这个问题。到目前为止,手动查杀是唯一有效的解决方案。
所以,我正在尝试自动执行查杀,但以下命令都不起作用。程序实际上在达到“100%完成”时停止生成输出,但一直持续到结束并擦除文件。
cmd_db -get file_1 | sed '/100% done/q'
cmd_db -get file_1 | while read line; do test "$line" = "100% done" && killall; done
until cmd_db -get file_1 | grep -m 1 "100% done"; do : ; done
还有其他办法吗?
答案 0 :(得分:0)
好吧,因为我不知道你的命令是什么,所以我必须解决它。首先,将命令的输出重定向到grep
,这将查找“100%完成”命令。并把它放在一个文件中。把整件事放在后台:
cmd_db -get file_1 | grep '100% done' > tmp$$ &
您将需要该进程ID,以便我们以后可以将其删除:
child=$!
现在,在我们获取该字符串之前,该文件将为空。把自己置于一个无限循环中,测试文件大小,直到它大于零,然后终止子进程并跳出循环:
while true; do
[ $( wc -c tmp$$ | cut -d' ' -f1 ) -gt 0 ] && { kill -9 $child; break; }
done
祝你好运!