【发布时间】:2015-05-24 13:49:21
【问题描述】:
我正在尝试围绕 bazaarvcb 实用程序构建一个 bash 脚本,但在构建参数时遇到了一些问题。 基本上,这是我要执行的命令(简化版):
bazaarvcb backup -H 192.168.1.100 -u user -p password --roll-out 4 \
--exclude-disk "[Datastore1] MyVM - NAS/MyVM-NAS_1.vmdk" \
--exclude-disk "[Datastore2] MyVM - NAS/MyVM-NAS_2.vmdk" \
"MyVM - NAS" "/home/user/backup/MyVM - NAS/"
在命令行上执行上述操作或将其粘贴到简单的 bash 脚本中,一切正常。但是当我尝试将排除磁盘(甚至虚拟机名称)替换为脚本中的变量参数时,我遇到了问题。
例子:
#!/usr/bin/env bash
set -o xtrace
readonly __VM="MyVM - NAS"
readonly __BACKUPROOT="/home/user/backup/MyVM - NAS/"
readonly -a __EXCLUDE_DISKS=( \
'[Datastore1] MyVM - NAS/MyVM-NAS_1.vmdk' \
'[Datastore2] MyVM - NAS/MyVM-NAS_2.vmdk' )
disks_excluded=""
for (( i = 0 ; i < ${#__EXCLUDE_DISKS[@]} ; i++ )); do
disks_excluded+="--exclude-disk \"${__EXCLUDE_DISKS[$i]}\" "
done
bazaarvcb backup -H 192.168.1.100 -u user -p password --roll-out 4 ${disks_excluded} "${__VM}" "${__BACKUPROOT}"
执行上述脚本时的结果是:
+ readonly '__VM=MyVM - NAS'
+ __VM='MyVM - NAS'
+ readonly '__BACKUPROOT=/home/user/backup/MyVM - NAS/'
+ __BACKUPROOT='/home/user/backup/MyVM - NAS/'
+ __EXCLUDE_DISKS=('[Datastore1] MyVM - NAS/MyVM-NAS_1.vmdk' '[Datastore2] MyVM - NAS/MyVM-NAS_2.vmdk')
+ readonly -a __EXCLUDE_DISKS
+ disks_excluded=
+ (( i = 0 ))
+ (( i < 2 ))
+ disks_excluded+='--exclude-disk "[Datastore1] MyVM - NAS/MyVM-NAS_1.vmdk" '
+ (( i++ ))
+ (( i < 2 ))
+ disks_excluded+='--exclude-disk "[Datastore2] MyVM - NAS/MyVM-NAS_2.vmdk" '
+ (( i++ ))
+ (( i < 2 ))
+ bazaarvcb backup -H 192.168.1.100 -u user -p password --roll-out 4 --exclude-disk '"[Datastore1]' MyVM - 'NAS/MyVM-NAS_1.vmdk"' --exclude-disk '"[Datastore2]' MyVM - 'NAS/MyVM-NAS_2.vmdk"' 'MyVM - NAS' '/home/user/backup/MyVM - NAS/'
usage: bazaarvcb [-h] [--version] ...
bazaarvcb: error: unrecognized arguments: NAS/MyVM-NAS_1.vmdk" MyVM - NAS/MyVM-NAS_2.vmdk" MyVM - NAS /home/user/backup/MyVM - NAS/
任何帮助将不胜感激。
【问题讨论】:
-
确保参数中没有空格
-
是的,这是我的第一个方法。事实上,我可以将我的 VM 名称从
"MyVM - NAS"更改为"MyVM-NAS",但由于引用 VMDK 磁盘时的语法 ([Datastore] folder/disk.vmdk),--exclude-disk参数的问题仍然存在。