3

我试图弄清楚如何让 bash 脚本自动确定 CD/DVD 的路径以进行处理。运行 Mac (10.7.4) 磁盘显示在:

/Volumes/[Volume_name]

由于卷名会根据磁盘而变化,因此我必须手动输入该部分。由于控件的工作方式,操作系统显然知道它是一张 CD/DVD。bash 是否可以使用操作系统使用的任何内容来确定是否存在 CD/DVD 并提供指向它的路径?

4

4 回答 4

5

我用drutil.

drutil使用 DiscRecording 框架与附加的刻录设备进行交互。

#!/bin/bash
id=$(drutil status |grep -m1 -o '/dev/disk[0-9]*')
if [ -z "$id" ]; then
    echo "No Media Inserted" 
else 
    df | grep "$id" |grep -o /Volumes.*
fi
于 2012-07-17T02:09:34.210 回答
1

给定一个 UNIX 块设备名称,diskutil info的输出比mount的更容易解析。例如,这个

function get_disk_mountpoint () {
    diskutil info $1 | perl -ne 'print "$1\n" if /^   Mount Point: +(.*)/';
}

作品。麻烦的是,OS X 也动态分配/dev/disk?设备到可移动媒体,所以你仍然需要类似的东西

function get_optical_mountpoints () {
    for i in $(diskutil list | egrep ^/); do
        if diskutil info $i | egrep -q '^   Optical Drive Type:' ; then
            get_disk_mountpoint $i
        fi
    done
}

专门列出光驱的挂载点。

于 2012-07-17T01:10:58.453 回答
0

如果安装了光盘,您可以使用mount它来查看它的安装位置。

于 2012-07-17T00:37:27.157 回答
0

把上面的部分放在一起,我认为这会做你想要的:

get_cd_volume() { 
  local rc=1
  for disk in $(diskutil list | grep ^/); do 
    if diskutil info "$disk" | grep -q Optical; then
      df | sed -ne  "s,^$disk.*\(/Volumes.*\)$,\1,p"
      rc=0 
    fi
  done
  if (( rc )); then
    echo >&2 "No volume mounted."
  fi
  return $rc
}
于 2012-07-17T02:27:00.433 回答