【问题标题】:Alternative to udev functionality on OSXOSX 上 udev 功能的替代方案
【发布时间】:2010-04-08 14:07:10
【问题描述】:

我正在尝试为外部硬盘创建自定义文件/签入签出脚本,但是部分脚本来自 Linux 机器,我已经测试过它可以正常工作,但使用 udevinfo ,OS X 没有 udev,那么有没有提供相同功能的东西?

#!/bin/bash
declare -a EXTERNAL_DISKS
declare -a INTERNAL_DISKS

for disk in /dev/[sh]d[a-z]; do
     eval `udevinfo -q env -n $disk`
     [ "$ID_BUS" = "usb" ] && EXTERNAL_DISKS=( ${EXTERNAL_DISKS[@]} $disk )
     [ "$ID_BUS" = "scsi" ] && INTERNAL_DISKS=( ${INTERNAL_DISKS[@]} $disk )
 done

 echo "Internal disks: ${INTERNAL_DISKS[@]}"
 echo "External disks: ${EXTERNAL_DISKS[@]}"

有人知道任何替代方案吗?或者可以在 OSX 上使用 bash 来实现这一点?

【问题讨论】:

  • 我想我已经找到了使用 diskutil 的解决方法,但如果有人有任何建议,我愿意接受。
  • 如果您解释为什么已经提交的答案没有,您可能会得到更满意的答案。

标签: bash macos udev


【解决方案1】:
#!/usr/bin/env python
from plistlib import readPlistFromString as rPFS
from subprocess import *

def shell(cmd):
    return Popen(cmd.split(), stdout=PIPE).communicate()[0]

disks = {False: [], True: []}   
for disk in rPFS(shell('diskutil list -plist'))['WholeDisks']:
    disks[rPFS(shell('diskutil info -plist ' + disk))['Internal']].append(disk)

print "Internal disks: " + ' '.join(disks[True])    
print "External disks: " + ' '.join(disks[False])    

【讨论】:

    【解决方案2】:

    IOKit 管理设备,DiskArbitration 管理海量存储设备。两者都没有太多的脚本界面。

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多