Bagaimana cara mendapatkan launchd plist untuk menjalankan perintah bash 1 baris yang rumit?

13

Saya punya perintah bash yang agak rumit yang mencakup beberapa pipa dan klausa if-then-else, belum lagi memanggil program sistem (seperti grep) dengan beberapa parameter.

Apakah ada cara untuk membuat plist yang launchd akan memuat dan menjalankan perintah kompleks ini secara langsung? (Berbeda dengan referensi plist, file skrip bash berisi perintah kompleks)

Terima kasih.

UrEl
sumber

Jawaban:

16

Iya. Saat mengatur ProgramArgumentselemen, cukup gunakan bashsebagai argumen pertama, -csebagai argumen kedua, lalu [your commands](ingat untuk mengganti entitas XML, seperti >, &dan seterusnya) sebagai yang ketiga, seperti:

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

Ganti elemen ketiga array dengan perintah Anda yang sebenarnya.

Scott
sumber
1
Saya belum menguji ini, tapi saya cukup yakin Anda tidak ingin tanda kutip di sekitar string perintah, tetapi Anda perlu html-entitas menyandikannya (misalnya menggunakan &gt;dan &lt;bukannya >dan <untuk pengalihan).
Gordon Davisson
@Gordon Davisson - Anda tentu benar tentang tanda kutip - mereka melayani tujuan yang sama dengan menjadikannya salah satu elemen dari array. Saya cukup yakin Anda benar tentang entitas XML juga. Tangkapan yang bagus. Saya telah mengedit jawaban saya sesuai dengan itu.
Scott