更新:
我取得了进步,但我仍然不确定我不理解的是什么。我已将我的脚本缩减为一行,但我仍然遇到同样的问题。
有关以下内容的任何见解?
注意:如果我输入" / Users / Da ... / Docker"或者在下面使用空格的退格键,结果是相同的。
for myvm in $(find /Users/David/Documents/Virtual\ Machines/Docker -name *.vmx); do echo -e "VM name: $myvm"; done
VM name: /Users/David/Documents/Virtual
VM name: Machines/Docker/RHEL7-DockerHost-Node04.vmwarevm/RHEL7-DockerHost-Node04.vmx
...
VM name: /Users/David/Documents/Virtual
VM name: Machines/Docker/RHEL7-DockerHost.vmwarevm/RHEL7-DockerHost.vmx
VM name: /Users/David/Documents/Virtual
VM name: Machines/Docker/RHEL7-DockerHost-Node01.vmwarevm/RHEL7-DockerHost-Node01.vmx
我错过了什么?
我发现了类似的问题,但答案对我不起作用。
我正在编写一个脚本,允许我在VMware Fusion中启动和停止多个虚拟机,而无需使用vmrun
上的"/Applications/VMware Fusion.app/Contents/Library/vmrun"
命令单击每个虚拟机。
当我尝试别名vmrun
时:
alias myvmcli='/Applications/VMware\ Fusion.app/Contents/Library/vmrun'
...我从bash中得到以下错误:
第3行:/ Applications / VMware \:没有这样的文件或目录
它显然缺少空格,但我认为使用退格符表示应该使用空格。
我在别名行中试过单引号和双引号无济于事。
如果我从命令行运行alias
,它可以正常工作。
我确定创建链接可以解决我的问题,但我真的想知道为什么这不起作用。
答案 0 :(得分:2)
您可以通过将目录添加到路径中来避免功能和别名:
PATH="/Applications/VMware Fusion.app/Contents/Library:$PATH"
然后vmrun
本身就可以了。
答案 1 :(得分:1)
引号内不需要反斜杠\,它会被保留。如果你没有使用引号,你只需要反斜杠,但通常引用是好的。
$ echo 'Hello\ world'
Hello\ world
$ echo "Hello\ world"
Hello\ world
$ echo Hello\ world
Hello world
$ echo "Hello world"
Hello world
在脚本中使用别名并不好,别名实际上是在命令行上设计为生产力辅助工具。
在这种情况下,只需将其分配给变量,您就不需要别名或函数。
cmd='/Applications/VMware Fusion.app/Contents/Library/vmrun'
然后,当你想要运行它时:
"$cmd"
请注意由于嵌入空间而需要的双引号。
使用vmware在OS X上测试。
正如其他人所说,比这更复杂的东西需要一个功能。
答案 2 :(得分:0)
你需要引用两次:
alias myvmcli='"/Applications/VMware Fusion.app/Contents/Library/vmrun"'
或逃避:
alias myvmcli=\''/Applications/VMware Fusion.app/Contents/Library/vmrun'\'
或
alias myvmcli="\"/Applications/VMware Fusion.app/Contents/Library/vmrun\""
小心第二和第三次逃跑的方式。他们不同。
你需要双引号,因为你需要引用一次,因为别名命令需要它(alias asd="echo asd"
),然后再一次因为别名内的命令需要它。
修改强>
即使我回答了这个问题,你发布的别名也很合适。可能是因为bash版本的差异:
[ 0][s: ~ ]$ cd /tmp
[ 0][s: tmp ]$ alias asd='asd\ zxc/test'
[ 0][s: tmp ]$ asd
woooo!