Question

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

Was it helpful?

Solution

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}')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top