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
简短的回答:
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 的“内部字段分隔符”)变量的值,它可能会做完全奇怪的事情。
归档时间: |
|
查看次数: |
2047 次 |
最近记录: |