3

CD/DVD を処理するために、bash スクリプトで CD/DVD へのパスを自動的に決定する方法を見つけようとしています。Mac (10.7.4) を実行すると、ディスクは次の場所に表示されます。

/Volumes/[Volume_name]

ディスクによってボリューム名が変わるので、その部分を手動で入力しています。オペレーティング システムは、コントロールの仕組みから、CD/DVD であることを明らかに認識しています。OS が CD/DVD があると判断し、そのパスを提供するために使用するものを bash で使用することは可能ですか?

4

4 に答える 4

5

私は使用しますdrutil

drutilDiscRecording フレームワークを使用して、接続されている書き込みデバイスと対話します。

#!/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

上記のピースをまとめると、これであなたが望むことができると思います:

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 に答える
0

ディスクがマウントされている場合は、マウントされmountている場所を表示するために使用できます。

于 2012-07-17T00:37:27.157 に答える