Como obter um launchd plist para executar diretamente um comando complexo de 1 linha bash?

13

Eu tenho um comando bash um tanto complexo que inclui alguns pipes e uma cláusula if-then-else, para não mencionar a chamada do programa do sistema (como grep) com vários parâmetros.

Existe uma maneira de criar uma lista que o launchd carregue e execute esse comando complexo diretamente? (Ao contrário de o plist referenciar um arquivo de script bash contendo o comando complexo)

Obrigado.

UrEl
fonte

Respostas:

16

Sim. Ao configurar o ProgramArgumentselemento, basta usar bashcomo o primeiro argumento, -ccomo o segundo argumento, em seguida, [your commands](lembrando-se de substituir quaisquer entidades XML, tais como >, &e assim por diante) como o terceiro, assim:

<key>ProgramArguments</key>
<array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>ls -1 | grep *.txt | echo &gt; allTextFiles</string>
</array>

Substitua o terceiro elemento da matriz pelo seu comando real.

Scott
fonte
1
Eu não testei isso, mas tenho certeza de que não deseja aspas na cadeia de comando, mas que você precisa codificá-la html-entity (por exemplo, use &gt;e em &lt;vez de >e <para redirecionamentos).
Gordon Davisson
@Gordon Davisson - você certamente está certo sobre as aspas - elas têm o mesmo objetivo de torná-lo um elemento da matriz. Tenho certeza de que você também está certo sobre as entidades XML. Boa pegada. Eu editei minha resposta de acordo.
18711 Scott