Tenemos un proceso de compilación que ahora está haciendo el diseño común para los DMG distribuidos. Esto se hace de una manera que he visto en muchos lugares: se adjunta el DMG, luego Finder hace su trabajo a través de osascript. Sin embargo, el script debe hacer referencia a la imagen montada por su nombre de volumen y AFAICT, estos no son únicos. Dado que la máquina que está haciendo este trabajo no está dedicada a eso, me preocupa que ya tenga una imagen montada con el mismo nombre (probablemente, ya que la persona que trabaja con esta máquina también es cliente de los DMG generados).
¿Hay alguna forma de referirse a un disco de forma única en el osascript si, por ejemplo, conozco su dispositivo o su punto de montaje? ¿O tal vez hay alguna otra forma de resolver esto, como adjuntar una imagen con un volname diferente para que pueda pasar un nombre generado aleatoriamente?
(Me sorprende que no vi ninguna mención de esto en la web, así que tal vez me esté perdiendo algo más obvio).
Después de mucho buscar y muchas maldiciones, creo que este es realmente un problema del que prácticamente nadie es consciente o preocupa. Aún así, pude encontrar una solución, no es genial, pero debería funcionar. La idea es montar el DMG en un directorio conocido con algún nombre aleatorio; este nombre (el último elemento en la -mountpoint
ruta) será name
propiedad del disco. Entonces, al usar esto, recorro todos los discos y busco los que coinciden name
; me quejo si no encuentro ninguno o más de uno; de lo contrario, tengo el objeto necesario listo para trabajar.
mnt="some-random-name-$$"
hdiutil attach -readwrite -noverify -noautoopen \
-mountpoint "/tmp/$mnt" "/tmp/out.dmg"
/usr/bin/osascript <<-EOF
tell application "Finder"
set myDisks to every disk of desktop
set theDMGDisk to ""
repeat with d in myDisks
if name of d = "$mnt"
if theDMGDisk = ""
set theDMGDisk to d
else
error "Too many attached DMGs found!"
end if
end if
end repeat
if theDMGDisk = "" then error "Attached DMG not found!"
-- found a single matching disk, continue
tell theDMGDisk
... etc ...
duci9y
<image name>.dmg
o/Volumes/<volume name>
?Eli Barzilay
tell disk <volname>
y ese nombre podría no ser único.