我遵循这教程,在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变量将在目标机器环境中设置,但我希望在本地machin中设置它。
export NET_ID=\$(nova network-list | egrep $SUBNET_NAME | get_field 1)发布于 2015-06-24 00:36:16
您可能希望这样做(运行在本地计算机上的脚本):
#!/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变量仅在脚本和脚本启动的任何子进程中可见。您不能将它导出到父环境(如果这是问题的话)。
Update:最终适用于OP的解决方案:
NET_ID=$(ssh -t $VM_IP_ADDRESS bash -c "' \
<commands>
nova network-list | egrep $SUBNET_NAME | get_field 1; \
<commands> '")
echo $NET_IDhttps://stackoverflow.com/questions/31015661
复制相似问题