获取 Automator shell 服务上的卷路径

问题描述 投票:0回答:1

我正在尝试在 Automator 中创建一个服务来在我的 USB 密钥上运行一个程序(作为右键单击服务运行)。

这是我需要运行的 bash shell 脚本

diskutil unmount /Volumes/KINGSTON
fatsort -f -oa /dev/disk1s1

两条路径

/Volumes/KINGSTON
/dev/disk1s1
应被视为变量,由 Automator 进行评估。 我得到第一个“获取选定的 Finder 元素”,然后将 shell 脚本设置为 $1

I.E.

diskutil unmount $1

但是我不知道如何获取/dev路径

macos shell automator
1个回答
0
投票

我知道这是一个非常古老的问题,但我也遇到了同样的问题。命令

diskutil unmount VOLUME
返回“未安装的 DEVICENODE 上的卷 VOLUME”。所以步骤是:

  1. 获取
    diskutil
    命令的输出。
  2. 删除无关的文本,以便仅保留设备节点。
  3. /dev/
    添加到文本前面。

我就是这样做的:

DEVPATH=$(diskutil unmount /Volumes/KINGSTON)
#remove the text in front of the device node
DEVPATH=${DEVPATH//Volume KINGSTON on /}
#remove the text at the end of the device node
DEVPATH=${DEVPATH// unmounted/}

#if the remaining text begins "disk", that is the device node
if [[ $DEVPATH == disk* ]] ; then
    DEVPATH=/dev/$DEVPATH
    sudo fatsort -n $DEVPATH
    diskutil eject $DEVPATH
else
    echo UNABLE TO GET DEVICE NODE FOR /Volumes/KINGSTON FROM $DEVPATH
fi

由于卷名称可能会有所不同,我还使用了一个变量来保存卷:

SDHC="NAME"
SDPATH="/Volumes/$SDHC"
DEVPATH=$(diskutil unmount $SDPATH)
#remove the text in front of the device node
DEVPATH=${DEVPATH//Volume $SDHC on /}
#remove the text at the end of the device node
DEVPATH=${DEVPATH// unmounted/}

#if the remaining text begins "disk", that is the device node
if [[ $DEVPATH == disk* ]] ; then
    DEVPATH=/dev/$DEVPATH
    sudo fatsort -n $DEVPATH
    diskutil eject $DEVPATH
else
    echo UNABLE TO GET DEVICE NODE FOR $SDPATH FROM $DEVPATH
fi
© www.soinside.com 2019 - 2024. All rights reserved.