如果在X时间内未获取BASH变量超时

时间:2014-01-27 20:26:08

标签: bash pid subshell

嘿伙计们,我试图找出一种方法来超时变量,如果它超过X时间试图获取内容,这是基于触摸服务器以验证它具有SSL。如果服务器在X秒内没有响应,我想将变量设置为空(或者如果可能的话设置一些其他标志)

我正在使用的是

response=$(echo ^D |openssl s_client -connect ${line}:443 2> /dev/null |openssl x509 -noout -hash |grep -E '^[[:xdigit:]]{8}')

目前$linebaidu.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并返回错误等

捕获变量时运行超时的最佳方法是什么?

由于

1 个答案:

答案 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}')