Bash 在循环中运行命令直到超时,然后导出变量
我试图在bash中运行一个命令,直到它成功为止,但是用一个超时来限制它。这里的问题是我使用的是子shell,因此主shell无法获得正确的值:Bash 在循环中运行命令直到超时,然后导出变量,bash,shell,sh,Bash,Shell,Sh,我试图在bash中运行一个命令,直到它成功为止,但是用一个超时来限制它。这里的问题是我使用的是子shell,因此主shell无法获得正确的值: timeout 10m bash -c 'until vm_ip=$( openstack server show f530d850-e255-4c5e-b984-43c4143a751b -c addresses --format value | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" ); do slee
timeout 10m bash -c 'until vm_ip=$( openstack server show f530d850-e255-4c5e-b984-43c4143a751b -c addresses --format value | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" ); do sleep 30; done'
有了这个,我试图获取虚拟机的IP,直到它达到超时。我希望在此命令后能够使用
vm\u ip
。似乎只需将结果打印到stdout
并将其捕获到目标shell中的变量即可:
vm_ip=“$(在vm_ip_internal=$(openstack服务器显示f530d850-e255-4c5e-b984-43c4143a751b-c地址——格式值| grep-oE”\b([0-9]{1,3}\){3}[0-9]{1,3}\b”);执行睡眠30;完成;回显“$vm ip_internal”
回显“$vm_ip”
你就不能省略命令中的bash-c
和引号吗?@myradio除非是内置的,否则它不会像那样工作是的,你是对的。当然,一个棘手的问题是写入文件。