Ovviamente non conosco lo scopo complessivo di ciò che stai cercando di ottenere, poiché poiché lo hai attualmente codificato, lo script potrebbe essere eseguito da un altro dispositivo USB di destinazione. Quindi l'ho scritto in modo un po 'diverso, tuttavia ha il mount point basato sul numero seriale se è montato l'USB Drive di destinazione. È quindi possibile diramare in base alle condizioni, ovvero se lo script è in esecuzione dall'unità USB di destinazione o meno e se l'unità USB di destinazione è montata o meno, ecc. Dopo aver ottenuto il punto di montaggio nel < em> code , ho incluso un altro blocco di code per testarlo se l'unità USB di destinazione è montata e da dove è stato eseguito lo script. Questo ovviamente è solo un esempio di test e dovrai fare quello che ti serve. La linea di fondo qui è, come ho codificato ottenendo il mount point dell'unità USB di destinazione in base al numero seriale e questo immagino che sia ciò che stai davvero cercando.
Ecco la mia versione del codice e viene emessa quando viene eseguita sia dal desktop che dall'unità USB di destinazione:
- Nota: prima dell'uso, modifica il numero seriale sottostante al valore appropriato.
Codice 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
Risposte durante l'esecuzione dall'unità USB di destinazione:
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
Risposte eseguite dal desktop con l'unità USB di destinazione connessa:
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
Risposte quando si esegue dal desktop senza l'unità USB di destinazione connessa:
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
Capire cosa sta facendo la riga di comando set usbMountPoint to (do shell script "...") as text
per impostare il valore della usbMountPoint
variabile .
-
system_profiler SPUSBDataType |
restituisce tutte le informazioni relative all'hardware USB e viene quindi inviato alla prima occorrenza di awk
nella riga di comando.
-
awk '/" & usbSerialNumber & "/' RS= |
cerca il numero seriale e visualizza tutto dalla prima riga vuota prima il numero seriale e la prima riga vuota dopo il numero di serie e il suo output viene quindi inviato alla seconda occorrenza di awk
nella riga di comando. Ciò garantisce che l'unica riga contenente ' /Mount Point:
' nell'output sia associata al numero seriale (se è installata l'unità USB di destinazione).
-
awk -F': ' '/Mount Point: /{print $2}'
trova la riga contenente 'Mount Point: '
, quindi usa ': '
come separatore di campi e stampa il secondo campo che sarà il percorso POSIX del punto di montaggio dell'unità USB di destinazione, o ''
come in nulla (perché non è stato montato).