我要检查,如果我的世界服务器可达。这是作为搬运工健康检查。在Ubuntu上所有的罚款,对高山的Linux没有。
这要求从公共服务器中JSON的状态字符串:
echo -e "\x16\x00\x04\x10\x6d\x63\x2e\x65\x6c\x64\x65\x72\x63\x72\x61\x66\x74\x2e\x64\x65\x63\xdd\x01\x01\x00" | nc mc.eldercraft.de 25565
因为你也许想知道你正在测试的内容,请求中包含的:
如果成功返回包含的玩家数量,所以我要检查,如果其英寸
echo -e "\x16\x00\x04\x10\x6d\x63\x2e\x65\x6c\x64\x65\x72\x63\x72\x61\x66\x74\x2e\x64\x65\x63\xdd\x01\x01\x00" | nc mc.eldercraft.de 25565 | grep -q '"players":' && echo "ok"
问:为什么不处理的grep高山和Ubuntu一样,则这个输出?即使我存储在一个变量的值,并呼应这给grep它无法处理此字符串。即使我只是用grep的“玩家”。
见解释答案
解决方案:
我试图与不同壳/ grep的变化,以重新创建在Alpine 3.9泊坞的结果,在退出和启动每个测试一个新的容器,然后双重检查。
下面是我得到了什么:
grep -F
:OK。如此看来,grep的确实是差的根本原因,以及它的方式处理来自NC二进制输出。
随着高山3.9和GNU grep的,如果我们忽略-q
和回声,我们会得到以下的输出:
二进制文件(标准输入)匹配
这可能表明,GNU和BusyBox的grep的可能有不同的处理二进制文件。
通过了BusyBox的grep的,https://github.com/mirror/busybox/blob/master/findutils/grep.c浏览,我们可以发现以下意见,下的grep的选项列表:
/* ignored: -a "assume all files to be text" */
/* ignored: -I "assume binary files have no matches" */
所以仔细估算,BusyBox的grep的总会给零个结果的二进制数据(默认选项) - 这也说明了其行为。
随着-F
- “fgrep一样模式”,BusyBox的grep的将逐字匹配"players":
二进制字符流,所以此工程。