我按照this教程在bash脚本中通过ssh运行几个命令。但现在我想得到我在ssh中运行的其中一个命令的输出,将其保存在变量中并在下一个命令中使用。
#!/bin/bash
ssh -t $VM_IP_ADDRESS bash -c "'
export NET_ID=nova network-list | egrep $SUBNET_NAME | get_field 1
nova boot $INSTANCE1_NAME --flavor m1.small --image $UBUNTU_IMAGE_NAME --key-name $KEY_PAIR_NAME --security-groups default --nic net-id=$NET_ID
'"
我想在本地环境中设置NET_ID,然后在下一个命令中使用它。 现在当我运行这个时,我收到了这个错误:
bash: line 17: export: `network-list': not a valid identifier
但我已经检查过了,这个命令在目标机器上给了我正确答案。
nova network-list | egrep test_net | get_field 1
更新:
使用此命令,NET_ID变量在目标机器环境中设置,但我想在我的本地机器中设置它。
export NET_ID=\$(nova network-list | egrep $SUBNET_NAME | get_field 1)
答案 0 :(得分:1)
您可能想要这个(在本地计算机上运行脚本):
#!/bin/bash
user=<remote-username>
ip=<remote-ip>
SUBNET_NAME=<you-know-the-value>
export NET_ID=$(ssh $user@$ip "nova network-list | egrep $SUBNET_NAME | get_field 1")
# Now, do anything with the $NET_ID on your local machine.
警告:NET_ID
变量仅在脚本和脚本启动的任何子进程中可见。您无法将其导出到父环境(如果这是问题)。
更新:最终适用于OP的解决方案:
NET_ID=$(ssh -t $VM_IP_ADDRESS bash -c "' \
<commands>
nova network-list | egrep $SUBNET_NAME | get_field 1; \
<commands> '")
echo $NET_ID