문제

Hey guys I am trying to figure out a way to time out a variable if it goes past X time trying to get contents, this is based on touching a server to verify it has SSL. If the server doesn't respond in X seconds I would like to just set the variable as empty (or set some other flag if possible)

What I am using is

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

where $line is baidu.com for now

I tried something like this

( 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}')
)

But realized several issues, such as A) I am in a subshell and cannot get my variable out, B) I am trying to run response=#hash and returning errors etc

What would the best way to run a timeout on capturing my variable?

Thanks

도움이 되었습니까?

해결책

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}')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top