sobota, 14 lipca 2012, 14:25

Lua in Automator

Zmarnowałem trochę czasu na rozwiązanie zagadki "czemu nie działa i co zrobić żeby", więc może ktoś jeszcze kiedyś skorzysta (choćby po użyciu translatora). Nie będę opowiadał co Lua i co Automator, ale chodzi o to, że w Automatorze łatwo sklecić Service podpierając się językiem skryptowym (jak dodać interpreter do listy wykonawców skryptów w Automatorze da się wyguglać pod Shells.plist). A tym bardziej chodzi o to, że akurat interpreter Lua się do tego nie nadaje, bo najwyraźniej nie chwyta parametrów przekazywanych w linii polecenia po opcji -e (robi wtedy "attempt to index global 'arg' (a nil value)" — jak już ktoś zauważył, ale nie umiał mądrze zapytać tzn. sensownie zatytułować pytania).

Rozwiązanie podano na talerzu, a skompilować luę każdy może (make macosx). Nie wszystko jest cacy, na końcu każdego podawanego skryptu trzeba jeszcze cierpliwie dopisywać os.exit() — ale działa. Tylko czemu autorzy nie zrobią tego porządnie dla wszystkich? No właśnie, dla wszystkich, czyli dla kogo? Nikt tego nie potrzebuje (a ja już mam). No i druga sprawa. Trzeba umieć pytać.

Aha, patch de Figueiredo pasuje do Lua 5.1.x (najnowsza wersja dziś to 5.2.1). A do /System/Library/Automator/Run Shell Script.action/Contents/Resources/Shells.plist dopisałem małpując:

<key>/usr/local/bin/luae</key>
  <dict>
    <key>args</key>
    <array>
      <string>-e</string>
      <string>%</string>
      <string>--</string>
    </array>
    <key>script</key>
    <array>
      <string>print(arg[1]); os.exit();</string>
    </array>
  </dict>

Jak widać zmieniłem nazwę paczowanego interpretatora z lua na luae. Lepiej nie psuć oryginału.


DODANE (2014-10-24): już nie pamiętam jak było poprzednio, ale przy aktualizacji do Yosemite zmodyfikowany przez mnie Shells.plist został wymieniony na świeżutki i musiałem znowu dopisać. Nic dziwnego bo /System

DODANE (2015-10-10): El Capitan ma nowy śliniaczek - System Integrity Protection. Nie można modyfikować niczego pod /System. Chyba że się System Integrity Protection wyłączy. Wyłączyłem. Ale nikogo nie namawiam.

Brak komentarzy: