bash – Redis:当通过awk管道llen时,谁正在吃我的田地?
发布时间:2020-12-15 21:57:40 所属栏目:安全 来源:网络整理
导读:Redis:2.0.4,2.4.1,…… 我打算写一个Nagios插件来检查列表的长度.这是我的脚本: #!/bin/shhelp(){ echo "Usage: $0 host port key -w warning -c critical"}case "$1" in --help) help exit ;;esacif [ $# -eq 0 ]; then help exit 3fiif [ $# -ne "7" ];
Redis:2.0.4,2.4.1,……
我打算写一个Nagios插件来检查列表的长度.这是我的脚本: #!/bin/sh help() { echo "Usage: $0 <host> <port> <key> -w <warning> -c <critical>" } case "$1" in --help) help exit ;; esac if [ $# -eq 0 ]; then help exit 3 fi if [ $# -ne "7" ]; then help exit 4 fi if [ $4 !="-w" -o $6 !="-c" ]; then help exit 5 fi REDIS_CLI="/usr/local/redis/bin/redis-cli" LLEN=`$REDIS_CLI -h $1 -p $2 llen $3 | awk '{ print $2 }'` if [ $LLEN -lt $5 ]; then echo "$3.llen:$2 OK - $LLEN | $3.llen:$2=$LLEN;$5;$7" exit 0 elif [ $LLEN -ge $5 -a $LLEN -lt $7 ]; then echo "$3.llen:$2 WARNING - $LLEN | $3.llen:$2=$LLEN;$5;$7" exit 1 elif [ $LLEN -ge "$7" ]; then echo "$3.llen:$2 CRITICAL - $LLEN | $3.llen:$2=$LLEN;$5;$7" exit 2 fi 但运行/usr/lib64/nagios/plugins/redis_llen.sh时遇到以下错误:192.168.5.201 2468 -w 90000 -c 100000: /usr/lib64/nagios/plugins/redis_llen.sh: line 31: [: -lt: unary operator expected /usr/lib64/nagios/plugins/redis_llen.sh: line 34: [: too many arguments /usr/lib64/nagios/plugins/redis_llen.sh: line 37: [: -ge: unary operator expected 在调试模式下运行它,我发现LLEN的值是……空白.由于llen queue_1返回正确的结果: # /usr/local/redis/bin/redis-cli -h 192.168.5.201 -p 2468 llen queue_1 (integer) 965 为什么管道吞下我的田地? (不仅是awk,还有echo,tee,……): # /usr/local/redis/bin/redis-cli -h 192.168.5.201 -p 2468 llen queue_1 | awk '{ print $0 }' 961 我可以检查字段数并打印相应的解决方法: | awk '{ if (NF == 2) print $2; else print $1 }'` 但我真的想知道它为什么会发生? (整数)和数字之间是否有空格或特殊字符? PS:似乎其他一些Redis版本(对于e.x:1.3.7)没有得到这个问题. 解决方法
您遇到的是redis-cli根据STDOUT选择不同的输出.如果STDOUT是TTY,redis-cli将使用它的“标准”格式输出.否则,“原始”格式是默认格式:
--raw Use raw formatting for replies (default when STDOUT is not a tty) 正如您从帮助或上面所看到的那样,您可以指定–raw以始终输出“原始”格式(没有类型限定符等).我发现通过源头挖掘的是,还有一个CSV模式,使用redis-cli –csv. 编辑:要强制“标准”输出,即使STDOUT不是TTY,也可以设置环境变量FAKETTY: FAKETTY=1 redis-cli llen some_list | awk '{ print $2 }' 要么 redis-cli --raw llen some_list | awk '{ print $1 }' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么这个代码在Scala 2.11中进行了类型检查,我该怎么做呢
- scala – Spark 2.0 DataSets groupByKey并划分操作和类型安
- vim quickfix list:操纵位置?
- .Net动态调用WebService
- Bootstrap简单认识之Tooltips组件
- unix – 使用xmllint从XML获取节点值
- shell – sed:参数列表太长
- VS Code 折腾记 - (7) 内置Debug功能深入【调教angular-cli
- Basic Tutorials of Redis(1) - Install And Configure Red
- [译] Angular DOM 更新机制