在本地环境ssh命令中分配bash脚本变量

时间:2015-06-24 00:27:45

标签: bash environment-variables

我按照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)

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