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.

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.