更新:
我有所进展,但仍不确定自己没有理解的是什么。我将脚本简化为一行,但仍然遇到同样的问题。
以下内容是否有任何见解?
注意:如果我输入“/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
,它可以正常工作。
解决方案/想法?
我相信创建一个链接可以解决我的问题,但我真的想知道为什么这不起作用。
.bashrc
中的shell函数,而不是你的别名。添加后,您应该执行souce ~/.bashrc
以使其在命令行上可用。myvmcli() { "/Applications/VMware Fusion.app/Contents/Library/vmrun" ; }
- Inianvmrun
),您认为处理带有空格的路径的最佳方式是什么?再次感谢! - DSpencerfor
循环,您可以玩弄IFS =
(字段内分隔符),但我不建议这样做,除非您真的知道自己在做什么,因为会出现意外的副作用。最好始终引用值(正如您在许多编程语言中必须这样做)-确实没有任何魔法方法可以避免它。我曾经教过bash
,只需拥有一个名为'这是一个文件'的文件就能破坏大多数学生的脚本。 - cdarke