嘿伙计们,我试图找出一种方法来超时变量,如果它超过X时间试图获取内容,这是基于触摸服务器以验证它具有SSL。如果服务器在X秒内没有响应,我想将变量设置为空(或者如果可能的话设置一些其他标志)
我正在使用的是
response=$(echo ^D |openssl s_client -connect ${line}:443 2> /dev/null |openssl x509 -noout -hash |grep -E '^[[:xdigit:]]{8}')
目前$line
为baidu.com
我试过这样的事情
( cmdpid=$BASHPID;
( sleep 10; kill $cmdpid; echo -e "\n\t$line missed window, terminating...\n"
) & exec response=$(echo ^D |openssl s_client -connect ${line}:443 2> /dev/null |openssl x509 -noout -hash |grep -E '^[[:xdigit:]]{8}')
)
但实现了几个问题,例如A)我在子shell中并且无法获取我的变量,B)我正在尝试运行response=#hash
并返回错误等
捕获变量时运行超时的最佳方法是什么?
由于
答案 0 :(得分:4)
IFS= read -t 10 -d '' variable < <(yourcommand)
e.g。
IFS= read -t 10 -d '' response < <(echo ^D |openssl s_client -connect ${line}:443 2> /dev/null |openssl x509 -noout -hash |grep -E '^[[:xdigit:]]{8}')