在 MacOS 上创建 ram 磁盘

HXS*_*947 3 disk-utility ramdisk macos

我正在尝试使用以下命令在 MacOS 上创建一个 ram 磁盘

diskutil erasevolume HFS+ RAM_Disk_512MB `hdiutil attach -nomount ram://16384`
Run Code Online (Sandbox Code Playgroud)

这似乎在我的台式机上运行良好,但是当我尝试在笔记本电脑上运行它时,出现以下错误

Unable to find disk for hdiutil attach -nomount ram://16384
Run Code Online (Sandbox Code Playgroud)

谷歌搜索并没有出现太多。有谁知道我可能做错了什么或者我如何解决这个问题?

这个给我带来问题的系统正在运行 MacOS 10.13.6

Gor*_*son 5

简短的回答:

diskutil erasevolume HFS+ RAM_Disk_512MB $(hdiutil attach -nomount ram://16384)
Run Code Online (Sandbox Code Playgroud)

原始问题的解释:我很确定原始问题是由于使用了错误的引号(单引号而不是反引号)引起的。比较这些命令:

diskutil erasevolume HFS+ RAM_Disk_512MB `hdiutil attach -nomount ram://16384`
diskutil erasevolume HFS+ RAM_Disk_512MB 'hdiutil attach -nomount ram://16384'
Run Code Online (Sandbox Code Playgroud)

他们看起来真的很像,对吧?但他们做的事情却大不相同;带有反引号的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 的“内部字段分隔符”)变量的值,它可能会做完全奇怪的事情。