Bash Can';t在curl-v telnet上使用grep-q
尝试执行以下命令时:Bash Can';t在curl-v telnet上使用grep-q,bash,centos,Bash,Centos,尝试执行以下命令时: curl-v telnet docker.io:80 | grep-q'连接到docker.io' 我无法得到“有趣的部分”,在那里我只需要我想要grep的消息 我想使用内置的Centos命令而不是netcat来检查端口是否打开,因为它是需要在预安装时运行的脚本的端口。您可以使用curl简单地检查端口 r=$(curl docker.io:80 --connect-timeout 5 2>/dev/null; echo $?) if [ $r == 0 ]; th
curl-v telnet docker.io:80 | grep-q'连接到docker.io'
我无法得到“有趣的部分”,在那里我只需要我想要grep的消息
我想使用内置的Centos命令而不是netcat来检查端口是否打开,因为它是需要在预安装时运行的脚本的端口。您可以使用curl简单地检查端口
r=$(curl docker.io:80 --connect-timeout 5 2>/dev/null; echo $?)
if [ $r == 0 ];
then
echo opened;
else
echo closed;
fi
如果$r为0,则打开,否则关闭。
请注意,您可以根据自己的情况更改连接超时。
[$r==0]
通常存在错误。使用[“$r”=0]
(=
是POSIX标准化的,而=
在dash或其他POSIX基线shell中不起作用;省略引号意味着如果curl
在echo
之前将内容写入stdout,则该内容将被视为[
,这会使行为变得非常不可预测),或者更好,只要如果curl…;那么
根本不使用$?
。这正是我的观点。它是一个bash扩展,所以它不能与Debian、Ubuntu等常用的/bin/sh
一起工作。如果你需要bash扩展,请一直使用[[
——这样你就不会在左边引用错误&c.BTW,即使使用if curl docker.io:80——连接超时5 2>/dev/null;然后echo打开;否则echo关闭;fi
,我也会担心当服务器在端口应答但不讲HTTP时,它是否会有非零退出状态——如果OP想要的话检查HTTP ness而不是open ness,可能他们不会要求telnet
…是的,curl可能不会在stdout上返回任何内容,但也可能返回正文内容。如果您编写的代码只适用于OP在其示例中使用的一个web服务器……那么,这非常具体。谢谢Charles。我学到了很好的一点我想他想检查他的服务器的出站规则是否向docker打开。io:80。连接的字符串被写入到stderr,而不是stdout。你只是管道stdout,所以grep
永远看不到它……无论如何,有更好的方法来判断HTTP服务器是否工作;如果curl——失败http://whatever
,第页他是你的朋友。