Bash 在循环中运行命令直到超时,然后导出变量

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

我试图在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 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
除非是内置的,否则它不会像那样工作是的,你是对的。当然,一个棘手的问题是写入文件。