Nur ausführen wenn Gerät angeschlossen ist

Waren Sie jemals in der Situation in der Sie ein Programm öffnen müssen, Sie dieses bestimmte Programm aber nur öffnen möchten wenn ein spezielles Gerät angeschlossen ist? Zum Beispiel wenn es einen symbolischen Link zu einer enormen Bibliothek auf einem externen Laufwerk gibt. Oder die Audio-Schnittstelle sollte eingesteckt werden bevor die DAW geöffnet wird.

Solche Anwendungen auszuführen ohne diese Anforderungen zu erfüllen kann Ihre Einstellungen durcheinander bringen und Sie müssen möglicherweise manuell die Einstellungen und Pfade nachjustieren, Aufräumarbeiten ausführen usw. Schließlich können Daten überschrieben werden oder verloren gehen.

Es ist allzu leicht ein nicht angeschlossenes Gerät zu vergessen. Dies kann ziemlich lästig sein und ist kontraproduktiv für einen kreativen Arbeitsablauf: Eine Idee kommt Ihnen in den Sinn und Sie möchten sofort beginnen daran zu arbeiten, aber nun ist man dadurch abgelenkt die Unordnung zu beseitigen die durch das Nichtvorhandensein des richtigen Gerätes vor aufsührung des Programms verursacht wurde.

In meinem speziellen Fall

Wenn ich es vergesse die Audio-Schnittstelle zu verbinden bevor ich Logic Pro X starte werden standardmäßig die System-Audio-Treiber verwendet. Dann muss ich manuell die Einstellungen ändern und sicher gehen, dass sich einige Dinge nicht verändert haben, wie unter Anderem die Sample-Rate.

Ein weiterer Fall ist wenn ich Video- oder Foto-Bearbeitungs-Software öffne ohne eine externe Festplatte angeschlossen zu haben auf der sich die Bibliothek befindet. Dann wird eine neue generische Bibliothek erstellt.

Voraussetzungen

Mit dem folgenden Befehl ist es möglich alle angeschlossenen USB-Geräte aufzulisten. Dies ist der erste Schritt um die Audio-Schnittstelle zu finden.

# List all USB Devices
❯ ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*'
Apple Internal Keyboard / Trackpad
BRCM20702 Hub
Bluetooth USB Host Controller
Duet USB

Damit können wir die Audio-Schnittstelle isolieren.

# Grep Duet USB Device
❯ ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*' | grep "Duet USB"
Duet USB

Der folgende Befehl hilft bei der Identifizierung falls ein Volume namens DATA gemountet ist.

# List external Disk
❯ mount | grep /Volumes/DATA
/Volumes/DATA

Mit diesen Informationen können wir eine Funktion schreiben und einen automatischen Arbeitsablauf einrichten der unseren Anforderungen entspricht.

Funktion

Sie können dies in Ihre .zshrc/.bashrc/etc. einsetzen.

# Music Arbeitsablauf
music () {
    RED='\033[0;31m'
    NC='\033[0m' # No color
    if ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*' | grep "Duet USB" > /dev/null && mount | grep /Volumes/DATA > /dev/null; then
        open /System/Library/PreferencePanes/Sound.prefPane
        open ~/Music/Sheet\ Music/;
        open /Applications/Logic\ Pro\ X.app/;
        open /Applications/Apogee\ Maestro\ 2.app/;
    else
        echo "Both ${RED}`DATA`${NC} and ${RED}`Duet USB`${NC} must be connected to proceed"
    fi
}

Beschreibung

Die Funktion music überprüft ob sowohl Duet USB als auch /Volumes/Data angehängt sind. Sie beendet für False oder fährt mit dem Arbeitsablauf fort.

Die Ausgabe bei Nichteinhaltung der Anforderungen ist:

❯ music
Both `DATA` and `Duet USB` must be connected to proceed.

Nach Bedarf anpassen. Variablen können sein: Duet USB, /Volumes/DATA, paths

System-Setup

  • OS X 10.11 El Capitan
  • ZSH mit .zshrc
  • USB Audio-Schnittstelle
  • Externes Laufwerk