我创建了一个"自动操作"服务来弹出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