要求是:
可能的脚本是
parent.sh:
./child.sh &
sleep 60
echo child_return_value
child.sh:
child_return_value=$(wget ipaddress)
答案 0 :(得分:3)
我会使用wget的-T | --timeout选项在指定的秒数后让请求超时。如果你这样做,你可以完全避免搞乱后台进程和IPC:
return_value=$(wget -T60 -O- ipaddress); ## 60 sec timeout
echo "$return_value";
答案 1 :(得分:3)
只是为了添加另一种可能的方法,如果你的shell支持,你可以在没有(手动)使用进程替换的情况下捕获后台进程的输出。您可以使用read
内置来获取输出,这允许设置超时值:
exec 3< <(wget -O- ipaddress);
read -r -u3 -t60;
return_value="$REPLY";
exec 3<&-;
echo "$return_value";
shell将根据此解决方案代表您实际创建FIFO或/ dev / fd / xx特殊文件。
答案 2 :(得分:0)
您可以让子进程将结果写入父进程可以读取的文件。
child_out="$(mktemp)"
./child.sh > "$child_out" &
sleep 60
if [ -s "$child_out" ]
then
child_return_value=$(cat "$child_out")
else
# Child did not produce a result yet.
fi
不要忘记删除父脚本中的临时文件。最好使用陷阱,以便在所有(好的,大多数)情况下将其移除。