在 Mac OS X 中使用"自动操作"脚本弹出所有磁盘和 dmg



我创建了一个"自动操作"服务来弹出Mac OS X中的所有磁盘。

find /dev -name "disk[1-9]" -exec diskutil eject {} ;

这有效,但我仍然收到一条错误消息:

"

操作"运行外壳脚本"遇到错误。

有人知道为什么会这样吗?

像这样运行它:

find /dev/disk[1-9] -exec diskutil eject {} ;

问题是,至少在我的Mac上,我得到了这个:

$ find /dev -name disk[1-9]
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/dev/disk2

发生的情况是find尝试进入/dev/fd/3似乎是一个目录,但事实并非如此,因此您会看到错误消息Not a directory。因此,即使find成功执行diskutil eject与模式匹配的文件,由于过程中遇到的错误,它将以状态代码 1 退出,指示错误。

通过使用我建议的解决方案,find只会考虑/dev/disk[0-9]的文件,并且不会尝试进入子目录,因为在这种情况下没有子目录。

更新

最后一个命令的退出代码存储在 $? 变量中。例如:

$ find /dev -name disk[0-9]
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/dev/disk2
$ echo $?
1
$ find /dev/disk[0-9]
/dev/disk2
$ echo $?
0

使用for循环的另一种方法是:

for f in /dev/disk[1-9]; do diskutil eject $f; done

最新更新