Kappas... toimii. Puolipiste ; toimii siis erilailla kuin &. Voin ketjuttaa puolipisteillä useampiakin käskyjä.
Jep. Komentotulkki suorittaa puolipistettä edeltävän komennon ja jää odottamaan, että sen suoritus päättyy. &-merkki taas käynnistää edeltävän komennon taustalle alikomentotulkkiin, ja jatkaa suoritusta välittömästi seuraaviin komentoihin.
Tomin mainitsemat && ja || toimivat puolipisteen tavoin, paitsi että edeltävän komennon palautusarvo tulkitaan ja seuraava komento suoritetaan tai jätetään suorittamatta sen mukaisesti. && suorittaa seuraavan komennon, jos ja vain jos palautusarvo on 0, eli onnistunut. || suorittaa seuraavan, jos ja vain jos palautusarvo on jokin muu kuin 0, eli epäonnistunut.
Lisäksi on mahdollista tehdä if - else ketju tähän tapaan:
jokukomento && echo onnistui || echo epäonnistui
Edit:
Tai... taitaa sittenkin tulla ongelma, jos osascripteissä on "kill", "qjackctl" ja "zyn".
Eli qjackctl ei tykkää, että se käynnistetään uudelleen, kun prosessi on jo käynnissä? Siinä tapauksessa voisi tarkistaa vaikka pgrepillä, onko ohjelma jo käynnissä ennen kuin yrittää käynnistää sen uudelleen:
Exec=sh -c "/usr/bin/killall zynaddsubfx; /usr/bin/pgrep qjackctl || /usr/bin/qjackctl & /usr/bin/zynaddsubfx --load=/home/redu/Zyn/presets/B3DET/detune2keyb3form2018b.xmz"
(Sivuhuomiona /usr/bin-polun määrittäminen taitaa olla turhaa noissa komennoissa, kun sen pitäisi olla PATH-ympäristömuuttujassa.)