Por supuesto, no conozco el alcance total de lo que está intentando lograr, sin embargo, como en la actualidad está codificado, el script podría ejecutarse desde otra unidad USB de destino. Así que lo escribí de forma un poco diferente, sin embargo, si se monta la unidad USB de destino, se obtiene el punto de montaje en función del número de serie . Luego puede bifurcarse según las condiciones, es decir, si la secuencia de comandos se ejecuta desde la unidad USB de destino o no y si la unidad USB de destino está montada o no, etc. Después de obtener el punto de montaje en la << em> code , he incluido otro bloque de code para probar si la unidad USB de destino está montada y desde dónde se ejecutó el script. Obviamente, esto es solo un ejemplo de prueba y tendrás que hacer lo que necesites. La conclusión aquí es cómo codifiqué la obtención del punto de montaje de la unidad USB de destino basada en el número de serie y esto es lo que realmente está buscando.
Esta es mi opinión sobre el código y se imprime cuando se ejecuta desde el escritorio y la unidad USB de destino:
- Nota: antes del uso, cambie el número de serie real a continuación al valor apropiado.
Código AppleScript:
-- # Get the volume this script is located on.
tell application "Finder"
try
set theVolumeThisScriptIsLocatedOn to text 1 thru -2 of POSIX path of (disk of (path to me) as alias)
log "The volume this script is located on is: " & quoted form of theVolumeThisScriptIsLocatedOn
on error
set theVolumeThisScriptIsLocatedOn to POSIX path of (disk of (path to me) as alias)
log "The volume this script is located on is: " & quoted form of theVolumeThisScriptIsLocatedOn
end try
end tell
-- # Set the Serial Number of the target USB Drive.
set usbSerialNumber to "200434112111BA425FA4"
-- # See if the USB Drive matching 'usbSerialNumber' is mounted and if so, get its mount point.
-- # The variable 'usbMountPoint' will contain either its mount point, e.g., '/Volumes/...', or '' as in nothing.
set usbMountPoint to (do shell script "system_profiler SPUSBDataType | awk '/" & usbSerialNumber & "/' RS= | awk -F': ' '/Mount Point: /{print $2}'") as text
log "The mount point is: " & quoted form of usbMountPoint
if usbMountPoint is equal to "" then
log "The target USB Drive is not mounted!"
else
log "The target USB Drive is mounted!"
end if
-- # See if the script is running from the target USB Drive or elsewhere.
if usbMountPoint is not equal to "" and theVolumeThisScriptIsLocatedOn is equal to usbMountPoint then
log "This script is running from the target USB Drive!"
else
log "This script is not running from the target USB Drive!"
end if
Responde cuando se ejecuta desde la unidad USB de destino:
tell current application
path to current application
--> alias "16GB-USB:USB Test.scpt"
end tell
tell application "Finder"
get disk of alias "16GB-USB:USB Test.scpt"
--> alias "16GB-USB:"
(*The volume this script is located on is: '/Volumes/16GB-USB'*)
end tell
tell current application
do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
--> "/Volumes/16GB-USB"
(*The mount point is: '/Volumes/16GB-USB'*)
(*The target USB Drive is mounted!*)
(*This script is running from the target USB Drive!*)
end tell
Responde cuando se ejecuta desde el escritorio con la unidad USB de destino conectada:
tell current application
path to current application
--> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
--> alias "Macintosh HD:"
end tell
tell current application
path to current application
--> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
--> alias "Macintosh HD:"
(*The volume this script is located on is: '/'*)
end tell
tell current application
do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
--> "/Volumes/16GB-USB"
(*The mount point is: '/Volumes/16GB-USB'*)
(*The target USB Drive is mounted!*)
(*This script is not running from the target USB Drive!*)
end tell
Responde cuando se ejecuta desde el escritorio sin la unidad USB de destino conectada:
tell application "Finder"
get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
--> alias "Macintosh HD:"
end tell
tell current application
path to current application
--> alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
end tell
tell application "Finder"
get disk of alias "Macintosh HD:Users:me:Desktop:USB Test.scpt"
--> alias "Macintosh HD:"
(*The volume this script is located on is: '/'*)
end tell
tell current application
do shell script "system_profiler SPUSBDataType | awk '/200434112111BA425FA4/' RS= | awk -F': ' '/Mount Point: /{print $2}'"
--> ""
(*The mount point is: ''*)
(*The target USB Drive is not mounted!*)
(*This script is not running from the target USB Drive!*)
end tell
Comprender qué hace la línea de comando set usbMountPoint to (do shell script "...") as text
para establecer el valor de la variable usbMountPoint
.
-
system_profiler SPUSBDataType |
genera toda la información relacionada con el hardware USB y luego se canaliza a la primera aparición de awk
en la línea de comandos.
-
awk '/" & usbSerialNumber & "/' RS= |
busca el número de serie y envía todo desde la primera línea en blanco antes el número de serie y la primera línea en blanco después de el número de serie y su salida se canalizan a la segunda aparición de awk
en la línea de comando. Esto garantiza que la única línea que contiene ' /Mount Point:
' en la salida esté asociada con el número de serie (si la unidad USB de destino está montada).
-
awk -F': ' '/Mount Point: /{print $2}'
encuentra la línea que contiene 'Mount Point: '
, luego usa ': '
como separador de campo e imprime el segundo campo, que será el nombre de ruta POSIX del punto de montaje de la unidad USB de destino, o ''
como en nada (porque no estaba montado).