我正在尝试使用grep + tail -1从日志文件中获取信息:
#!/bin/bash
# declare an array called array and define 3 vales
array=( 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 )
array2=( 00 30 )
for i in "${array[@]}"
do
for j in "${array2[@]}"
do
output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* | tail -1)
echo /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j*
echo "$output"
done
done
这只输出空字符串,但我绝对知道日志中有短语“ filtered”。
可能是什么问题? 我尝试了同一脚本的多种变体,但它只返回空字符串。
谢谢!
答案 0 :(得分:1)
在这种输出值分配中,应始终将标准错误(stderr)重定向到标准输出(stdout)。在您的情况下,如果grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j*
失败,错误输出将不会存储在变量output
中,因此您很难调试程序。如下所述更改脚本,其中错误消息也将分配给变量output
。
output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* 2>&1 | tail -1)
现在,如果搜索字符串不可用echo $output
将打印一个空字符串,如果日志文件不可用,它将显示错误消息
希望这会对您有所帮助。
答案 1 :(得分:-1)
首先,也许尝试测试通过构建字符串“ tabatoo2_20180627 $ i $ j *”获得的文件是否存在。