Comment obtenir un plist launchd pour exécuter directement une commande bash 1 ligne complexe?

13

J'ai une commande bash quelque peu complexe qui comprend des canaux et une clause if-then-else, sans parler de l'appel du programme système (comme grep) avec plusieurs paramètres.

Existe-t-il un moyen de créer un plist que launchd chargera et exécutera directement cette commande complexe? (Par opposition à avoir la référence plist un fichier de script bash contenant la commande complexe)

Merci.

UrEl
la source

Réponses:

16

Oui. Lors de la configuration de l' ProgramArgumentsélément, utilisez simplement bashcomme premier argument, -ccomme deuxième argument, puis [your commands](en vous souvenant de remplacer toutes les entités XML, telles que >, &et ainsi de suite) comme troisième, comme ceci:

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

Remplacez le troisième élément du tableau par votre commande réelle.

Scott
la source
1
Je n'ai pas testé cela, mais je suis sûr que vous ne voulez pas de guillemets autour de la chaîne de commande, mais que vous devez l'encoder par l'entité html (par exemple, utiliser &gt;et &lt;au lieu de >et <pour les redirections).
Gordon Davisson
@Gordon Davisson - vous avez certainement raison sur les citations - elles servent le même but que d'en faire un élément du tableau. Je suis sûr que vous avez également raison sur les entités XML. Bonne prise. J'ai modifié ma réponse en conséquence.
Scott