我正在尝试使用以下命令在 MacOS 上创建 ram 磁盘
diskutil erasevolume HFS+ RAM_Disk_512MB `hdiutil attach -nomount ram://16384`
这似乎在我的桌面上工作正常,但是当我尝试在我的笔记本电脑上运行它时,我收到以下错误
Unable to find disk for hdiutil attach -nomount ram://16384
谷歌搜索并没有出现太多。有谁知道我可能做错了什么或如何解决这个问题?
这个给我带来问题的系统正在运行 MacOS 10.13.6
简短的回答:
原始问题的解释:我很确定原始问题是由于使用了错误的引号(单引号而不是反引号)。比较这些命令:
他们看起来真的很相似,对吧?但他们做的事情非常不同;带有反引号
hdiutil ...
的命令作为命令运行,并将其输出用作diskutil
. 第二个将hdiutil ...
其视为文字字符串,并将其传递给,diskutil
这根本不是您想要的。这两种引号看起来非常相似(至少有一本关于 Unix 的书使用了相同的字体),所以这是一个容易(且常见)的错误。$( )
与反引号基本相同,但在视觉和语法上更清晰,因此请改用它。这实际上是做什么的:该命令
hdiutil attach -nomount ram://16384
创建一个 RAM 磁盘,并打印对应于它的设备文件的路径。类似“/dev/disk4”的东西(除了它打印它后面跟着一堆空格)。然后$( )
将其视为主命令的参数,因此它运行类似diskutil erasevolume HFS+ RAM_Disk_512MB /dev/disk4
,格式化(并隐式挂载)新创建的 RAM 磁盘。我最初建议在
$( )
零件周围加上双引号,但结果却造成了麻烦。如果没有双引号,命令 in 的输出$( )
将被 shell 解析(以一种奇怪的方式),这通常会导致更多的问题而不是帮助。然而,在这种情况下,输出的末尾包含一堆空格,hdiutil
如果被告知它们是设备条目路径的一部分,这些空格可能会造成混淆。无引号解析会删除空格,所以它是这样工作的。这应该可以避免不带引号的命令扩展容易出错的其他事情,并发出一个大警告:如果您弄乱了
IFS
(shell 的“内部字段分隔符”)变量的值,它可能会做完全奇怪的事情。