我不知道我做错了什么。我真正想做的是在我的bash脚本中运行这个命令,并获取值:
tail -1 com-html.log | grep 'Min: ,'
这在手动运行时有效:
tail -1 com-html.log | grep 'Min: ,'
Min: , MAX:
然而,我无法让它在bash脚本中工作:(我已经简化了它,以防管道位出现问题)
#!/bin/bash
test = $(tail -1 com-html.log)
echo "test: $test";
我做错了什么?Bash对我来说很新鲜,所以请温柔=)
根据以下建议-我甚至尝试过:
test=$(tail -1 com-html.log | grep 'Min: ,');
echo "test: $test"
if [ -z "$test"]
then
echo "hmmm test is empty"
fi
但它总是显示:
hmmm test is empty
我一定错过了什么愚蠢的
我尝试了几种方法:
test=$(tail -1 com-html.log | grep 'Min: ,')
echo "test: $test";
test=$(tail com-html.log | grep 'Min: ,')
echo "test: $test";
甚至最简单的就是看看我是否得到了任何值:
test=$(tail -1 com-html.log)
echo "test: $test";
所有这些都有$test作为空
更新:天哪,这就是为什么一天不应该做太多编码的原因。你错过了愚蠢的东西!因此,这个脚本关注服务器和RAM的负载。如果它检测到其中一个过高,它将终止脚本,并等待它重新启动。所以我有这样的东西:
if [ -n "$(ps -ef | grep -v grep | grep 'get-html-all-domains.cgi')" ];
then : ;
else
echo "nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log"
nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log & # restart it...
fi
现在这是可行的,但当它触发时,com-html.log的输出并不是即时的(因为它必须从DB中获取值,然后决定没有什么可运行的)。所以为了避开它,我改了一条线:
nohup perl get-html-all-domains.cgi $tld new $forks $per_page > com-html.log &
至:
nohup perl get-html-all-domains.cgi $tld new $forks $per_page >> com-html.log &
(请注意>而不是现在的>所以它是附加的,而不是完全覆盖它)
然后在最后检查最后一行是否是我们要找的:
if [ -n "$(tail -2 com-html.log | grep 'Min: ,')" ]
then
echo "2: Seems to be at end... lets stop :)"
echo -ne ' 07'
exit 0
fi
tail -1
只显示com-html.log
的最后一行。
因此,如果grep字符串(Min: ,
)不在最后一行,则test
将为空。
变量的最后一行
test=$(tail -1 com-html.log)
echo "test: $test";
任何包含Min: ,
的行
test=$(grep 'Min: ,' < test.log)
echo "test: $test";
最后一行;如果包含Min: ,
,请在线试用
test=$(tail -1 com-html.log | grep 'Min: ,')
echo "test: $test";