Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3089: XnView MP přestal spouštět .sh skripty. Náhle, bez zjevného důvodu

Miluju tyhle záhady (ehm). V sobotu to funguje, v neděli ráno už XnView MP nespustí žádný z .sh (bash) skriptů navěšených na toolbar. A ani přidaných do Open With. Nestane se vůbec nic. 

Hledání v Google nevedlo k ničemu. Umělé inteligence (Perplexity ani ChatGPT)  k tomu moc nedokázaly říct, ale aspoň navedly ke spuštění XnView z příkazové řádky a tím zobrazování chybových hlášek:

/Applications/XnViewMP.app/Contents/MacOS/XnViewMP 2>&1 | tee ~/Desktop/xnview-output.log

Čímž se nakonec ukázalo, že nespouštění předchází chyba:

_LSOpenURLsWithCompletionHandler() failed for the application /Users/danieldocekal/MyScripts/add_shadow.sh with error -10811 for the file /Users/danieldocekal/Downloads/Screenshot 2025-10-12 at 8.24.43.png.

Nepodařilo se ale přijít na to jak ji odstranit.

Nutno dodat, že mezi sobotou a nedělí nebyla žádná aktualizace, žádný nový MacOS, žádný nový XnViewMP (s tím jsem ostatně zkusil downgradovat, stejně jako mu resetnout práva aby si je znova vyžádal). Zkusil jsem i restart Macu, to ale také nepomohlo. Přitom předmětné shell skripty jdou v pohodě spouštět (ani v nich se nic neměnilo, prakticky rok).

Pokud na tlačítko navážu spuštění aplikace, tak to funguje. Prostě jen ne .sh

Nakonec AI alespoň přišla s tím, že “je to obvyklá záhada v MacOS co pořád něco chce omezovat” a doporučila to spouštět přes Automator. A ještě později při resetu Mac Mini Apple Script. Což je , nutno dodat, ještě elegantnější řešení.

Apple Script jde uložit jako .app

Script Editor pro vytváření Apple Script je možné po doplnění potřebného skriptu využít v Uložit jako .app – a to už je něco, co XnViewMP spouští bez problémů.

Tedy v tomto případě se spouští add_shadow.sh pomoci tohoto skriptu (a měl by umět navíc i zpracovat více vybraných, tedy pokud to tam XnView předává, musím časem zkusit):

on open theItems
	repeat with oneItem in theItems
		set filePath to POSIX path of oneItem
		do shell script quoted form of
		  "/Users/danieldocekal/MyShellScripts/add_shadow.sh" &
		  space & quoted form of filePath
	end repeat
end open

Pozor na to, že add_shadow.sh spouští magick, které ale v takto vyvolaném prostředí nenajde. Snadno řešitelné tím, že do add_shadow.sh dáte přímo vyvolání magick včetně cesty (v terminálu zjistíte třeba přes which magick)

Automator jako záchrana (původní řešení, složitější)

Tam vytvořit Application a do akce přidat Run Shell Script. Tomu nastavit Shell na /bin/bash a změnit Pass input na as arguments. Následně vložit něco jako 

/bin/bash /Users/danieldocekal/MyScripts/add_shadow.sh "$@"

Pak si to ideálně uložit (protože případná editace) a exportovat abyste dostali aplikaci (tedy něco jako app_shadow.app, do patřičné složky odkud budete spouštět. Ale můžete to vytvářet, editovat i uložit už této složce. 

V XnView MP pak už v toolbaru místo původního .sh nastavit k tlačítku tuto .app

Problém tedy sice nevyřešen, nicméně obejit tak, že tlačítka opět dělají co mají.