Come faccio ad autorunare i file di comando da un drive USB quando lo collego?

2

Ho creato due file .command, "lock" e "unlock". Il primo nasconde i file nascosti con: defaults write com.apple.Finder AppleShowAllFiles TRUE , quindi aggiorna il finder con killall Finder . Il secondo fa il contrario, ho semplicemente sostituito TRUE con FALSE , nel primo comando.

Vorrei copiare questi dati su una chiavetta USB in modo tale che quando collego questa USB al mio laptop, esegue automaticamente il file "unlock" e, non appena lo scollego, il "lock" "il file è eseguito.

Non so fino a che punto sia possibile e quali inconvenienti / problemi possa comportare, ma qualsiasi aiuto o input è molto apprezzato. Lo sto facendo anche solo per divertimento, quindi sto perfettamente bene con lo sperimentare!

    
posta spoonless 27.04.2013 - 15:20
fonte

2 risposte

2

Un servizio launchd supporta l'opzione WatchPaths, che avvia un programma quando vengono modificati i contenuti di una cartella:

WatchPaths <array of strings> This optional key causes the job to be started if any one of the listed paths are modified.

Guardando / Volumi, può essere creato uno script di shell che controlla se il disco esterno è montato o meno ° ed esegue i comandi appropriati °°.

° Il modo più semplice sarebbe verificare la presenza di un / Volumes / nome-disco / cartella, ma sarebbe anche il modo più semplice per ingannare rinominando la partizione o avendo un'altra con lo stesso nome, causando il montaggio punto da modificare.

°° Sarebbe opportuno usare un file temporaneo che memorizza il risultato dell'ultima esecuzione per evitare di uccidere il Finder se un altro disco doveva essere [un] montato.

    
risposta data 27.04.2013 - 17:25
fonte
0

Non ho potuto farlo funzionare in modo affidabile, ma potresti provare a salvare un elenco di proprietà come questo in ~/Library/LaunchAgents/showall_external.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>showall_external</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>k=com.apple.Finder\ AppleShowAllFiles
sleep 3
if [[ -d /Volumes/WD/ ]]; then
    if [[ $(defaults read $k) = 0 ]]; then
        defaults write $k -bool true
        osascript -e 'quit app "Finder"'
    fi
else
    if [[ $(defaults read $k) = 1 ]]; then
        defaults write $k -bool false
        osascript -e 'quit app "Finder"'
    fi
fi</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Volumes/WD/</string>
    </array>
</dict>
</plist>

Può essere caricato con launchctl load ~/Library/LaunchAgents/showall_external.plist o disconnettendosi e tornando indietro.

Senza il comando sleep / Volumes / WD / a volte esisteva quando il volume veniva smontato. Il programma viene eseguito anche quando i file in / Volumes / WD / sono modificati, quindi controlla prima il valore corrente della chiave. Il programma viene rallentato se è stato eseguito negli ultimi 10 secondi, quindi è possibile che si verifichi un ritardo di 10 secondi prima dell'esecuzione.

ControlPlane può eseguire uno script quando è collegato un dispositivo USB, ma non sono riuscito a capire come eseguire uno script quando Il dispositivo USB è disconnesso o viene espulso un volume.

    
risposta data 28.04.2013 - 02:03
fonte

Leggi altre domande sui tag