(01. Dezember 2003 — tk)

Aliase in der Shell

Die sogenannten Aliase, die das MacOS für leichtgewichtige Dateireferenzen benutzt, unterscheiden sich in mehrerlei Hinsicht von den symbolischen Links, wie sie unter Unix üblich sind:

  • Keine ausschließliche Orientierung an absoluten Pfaden sondern ebenfalls Ausrichtung an den sogenannten File- und Directory-IDs, die sich nicht ändern, wenn die Datei bzw. der Ordner verschoben oder umbenannt werden, weshalb auch in diesen beiden Fällen Aliase nicht ins Leere zeigen
  • Nicht mit den BSD-Semantiken auflösbar sondern via des Alias Managers respektive Finders

Möchte man also in der Shell bzw. mit Unix-Mitteln die Möglichkeit haben, das Original eines Aliases aufzulösen, muß man ein wenig in die Trickkiste greifen bzw. die Brücke zwischen dem BSD-Keller und den höheren Schichten wie dem Finder schlagen.

Zum Glück stehen mit osascript und osacompile passende Helfer bereit, mittels derer per AppleScript der Finder zur Kooperation bewegt werden kann.

Die folgende bash- oder sh-Funktion benutzt osascript, um zu prüfen, ob es sich bei der übergebenen Datei um ein Alias handelt und dieses im positiven Fall gleich aufzulösen:

ResolveAlias() {
    osascript <<-END-OF-SCRIPT
    set SourceFile to (POSIX file "$1")
    set IsAlias to (alias of (info for SourceFile))
    tell application "Finder"
        if IsAlias then
            set Original to (original item of SourceFile) as text
        else
            set Original to SourceFile as text
        end if
    end tell
    set TargetFile to (quoted form of POSIX path of Original)
    END-OF-SCRIPT
} # ResolveAlias

Wenn Apples Developer Tools installiert sind, gibt es noch die Möglichkeit, per /Developer/Tools/GetFileInfo herauszufinden, ob es sich um ein Alias handelt. In diesem Fall wird das entsprechende Finder Flag ausgewertet und parallel verglichen, ob die Datei kein symbolischer Link ist:

CheckIfAlias() {
    /Developer/Tools/GetFileInfo "$1" | grep -q "^attributes: A"
    if [ ! -s "$1" -a $? -eq 0 ]; then
        return 0
    else
        return 1
    fi
} # CheckIfAlias

Abschließend noch eine Funktion, mit der sich »Zwitterwesen« erstellen lassen, also eine Mischung aus Symlink und Alias. Dazu wird einem Alias (dessen relevante Daten bei MacOS X ausschließlich in dessen Resource Fork stecken) einfach in die Data Fork der Pfad zum Original implantiert und FileType/Creator auf »slnk«/»rhap« gesetzt:

CreateHermaphrodite() {
    MyOriginal=$(ResolveAlias "$1")
    echo "\${MyOriginal}" >»$1«
    /Developer/Tools/SetFile -t »slnk« -c »rhap« »$1«
} # CreateHermaph

Copyright © Thomas Kaiser, 2008 (erstellt 13.Nov.2008 8:11:56)

Dieser Beitrag kann durch jedermann gemäß den Bestimmungen der Lizenz für die freie Nutzung unveränderter Inhalte genutzt werden. Die Lizenzbedingungen können unter http://www.uvm.nrw.de/opencontent abgerufen oder bei der Geschäftsstelle des Kompetenznetzwerkes Universitätsverbund MultiMedia NRW, Universitätsstraße 11, D-58097 Hagen, schriftlich angefordert werden.