Làm thế nào để có được một launchd plist để diretly chạy một lệnh bash 1 dòng phức tạp?


13

Tôi có một lệnh bash hơi phức tạp bao gồm một số đường ống và mệnh đề if-then-other, chưa kể chương trình hệ thống gọi (chẳng hạn grep) với nhiều tham số.

Có cách nào để tạo ra một plist mà launchd sẽ tải và chạy trực tiếp lệnh phức tạp này không? (Trái ngược với việc tham chiếu plist một tệp bash script chứa lệnh phức tạp)

Cảm ơn.

Câu trả lời:


16

Đúng. Khi thiết lập ProgramArgumentsphần tử, chỉ cần sử dụng bashlàm đối số thứ nhất, -clàm đối số thứ hai, sau đó [your commands](nhớ thay thế bất kỳ thực thể XML nào, chẳng hạn như >, &v.v.) làm đối số thứ ba, như vậy:

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

Thay thế phần tử thứ ba của mảng bằng lệnh thực tế của bạn.


1
Tôi chưa kiểm tra điều này, nhưng tôi khá chắc chắn rằng bạn không muốn trích dẫn xung quanh chuỗi lệnh, nhưng bạn cần phải mã hóa thực thể html (ví dụ: sử dụng &gt;&lt;thay vì ><để chuyển hướng).
Gordon Davisson

@Gordon Davisson - bạn chắc chắn đúng về các trích dẫn - chúng phục vụ cùng một mục đích như làm cho nó trở thành một yếu tố của mảng. Tôi khá chắc chắn rằng bạn cũng đúng về các thực thể XML. Nắm bắt tốt. Tôi đã chỉnh sửa câu trả lời của mình cho phù hợp.
Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.