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.