No podía conseguir que esto funcione de forma fiable, pero se podría intentar guardar una lista de propiedades, como a ~/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 por salir y regresar.
Sin el sueño de comandos /Volúmenes/WD/ a veces existían cuando el volumen se está desmontando. El programa también se ejecuta cuando los archivos en /Volumes/WD/ son modificadas, por lo que se comprueba el valor actual de la clave de la primera. El programa se estrangulado si se ha ejecutado en los últimos 10 segundos, por lo que no puede haber un retraso de hasta 10 segundos antes de que se ejecute.
ControlPlane puede ejecutar una secuencia de comandos cuando un dispositivo USB está conectado, pero no pude averiguar cómo ejecutar una secuencia de comandos cuando un dispositivo USB está desconectado o un volumen que se expulsa.