我正在创建一个使用whiptail进行签出的bash脚本。我已经完成了所有工作,但我想在显示菜单等之前检查是否可以访问svn。
目前我要执行 svn ls svn://host 并检查响应是否等于 svn: 未知主机名“host”。如果是则退出/显示消息。
有没有更好的方法使用 shell 命令来做到这一点?
格茨·迈克尔
答案1
你的解决方案似乎足够好了,因为如果你要结账,可以保证SVN 版本已安装在系统上。因此没有其他要求,只需检查远程端口是否打开。
然而,另一个可能的解决方案是使用网猫它安装在大多数类 UNIX 系统上:
#! /bin/sh
TIMEOUT=2 # in seconds
HOST=$1
PORT=$2
$(nc -z -w ${TIMEOUT} ${HOST} ${PORT}) || \
exit 1 # Port is closed
# Port is open, continue processing
受益于网猫基于脚本的超时值可以防止我们在受保护的端口上等待很长时间降低防火墙规则。
答案2
您不需要检查命令输出...只需检查状态就足够了。
#!/bin/sh
svn info ${SVN_URL}
if [ $? -eq 1 ]; then
echo "svn command failed: unable to access ${SVN_URL}";
exit 1;
fi
#else continue svn server appears to be ok
这样做的好处是,如果输入错误的 URL,它也会失败。
干杯