¿Cómo ejecuto automáticamente los archivos .command desde una unidad USB cuando lo conecto?

2

He creado dos archivos .command, "bloquear" y "desbloquear". El primero oculta los archivos ocultos con: defaults write com.apple.Finder AppleShowAllFiles TRUE , luego actualiza el buscador con killall Finder . El segundo hace lo contrario, simplemente reemplacé TRUE con FALSE , en el primer comando.

Me gustaría copiarlos en una memoria USB de tal manera que cuando conecte este USB a mi computadora portátil, ejecute automáticamente el archivo de "desbloqueo", y tan pronto como lo desenchufe, el "bloqueo" "el archivo se ejecuta.

No sé en qué medida esto es posible y qué inconvenientes / problemas puede conllevar, pero cualquier ayuda o aportación es muy apreciada. También hago esto solo por diversión, ¡así que estoy perfectamente bien con la experimentación!

    
pregunta spoonless 27.04.2013 - 15:20

2 respuestas

2

Un servicio launchd admite la opción WatchPaths, que inicia un programa cuando se modifican los contenidos de una carpeta:

  

WatchPaths < array of strings >        Esta clave opcional hace que el trabajo se inicie si se modifica cualquiera de las rutas enumeradas.

Al ver / Volúmenes, se puede crear un script de shell que verificará si su disco externo está montado o no ° y ejecutará los comandos apropiados °°.

° La forma más sencilla sería verificar la presencia de una carpeta / Volumes / disk-name /, pero también sería la más sencilla de engañar al cambiar el nombre de la partición o tener otra con el mismo nombre, lo que provocó el montaje punto a modificar.

°° Sería apropiado usar un archivo temporal que almacene el resultado de la última ejecución para evitar matar al Finder si otro disco fuera a ser [un] montado.

    
respondido por el Ryccardo 27.04.2013 - 17:25
0

No pude hacer que esto funcionara de manera confiable, pero puedes intentar guardar una lista de propiedades como esta como ~/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>

Se puede cargar con launchctl load ~/Library/LaunchAgents/showall_external.plist o al cerrar sesión y volver a iniciarla.

Sin el comando de suspensión / Volúmenes / WD / a veces existía cuando se desmontaba el volumen. El programa también se ejecuta cuando se modifican los archivos en / Volumes / WD /, por lo que primero verifica el valor actual de la clave. El programa se acelera si se ha ejecutado en los últimos 10 segundos, por lo que puede haber un retraso de hasta 10 segundos antes de ejecutarse.

ControlPlane puede ejecutar una secuencia de comandos cuando se conecta un dispositivo USB, pero no pude averiguar cómo ejecutar una secuencia de comandos cuando un El dispositivo USB está desconectado o se expulsa un volumen.

    
respondido por el user495470 28.04.2013 - 02:03

Lea otras preguntas en las etiquetas