¿Cómo obtener un pliegue launchd para ejecutar directamente un complejo comando bash de 1 línea?

13

Tengo un comando bash algo complejo que incluye algunas canalizaciones y una cláusula if-then-else, sin mencionar el programa del sistema de llamadas (como grep) con múltiples parámetros.

¿Hay alguna manera de crear un plist que launchd cargará y ejecutará este complejo comando directamente? (En lugar de que el plist haga referencia a un archivo de script bash que contiene el comando complejo)

Gracias.

UrEl
fuente

Respuestas:

16

Si. Al configurar elProgramArguments elemento, simplemente use bashcomo el primer argumento, -ccomo el segundo argumento, luego [your commands](recordando reemplazar cualquier entidad XML, como >, &etc.) como el tercero, así:

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

Reemplace el tercer elemento de la matriz con su comando real.

Scott
fuente
1
No he probado esto, pero estoy bastante seguro de que no quiere comillas alrededor de la cadena de comandos, pero que necesita codificar html-entity (por ejemplo, usar &gt;y en &lt;lugar de >y <para redireccionamientos).
Gordon Davisson
@Gordon Davisson, ciertamente tiene razón sobre las citas, tienen el mismo propósito que convertirlo en un elemento de la matriz. Estoy bastante seguro de que también tienes razón sobre las entidades XML. Buena atrapada. He editado mi respuesta en consecuencia.
Scott,