Sử dụng biến môi trường trong tập lệnh launchd


21

Tôi tò mò liệu có thể chỉ định biến ProgramArgumentsenConnionment trong phần tập lệnh luanchd trên Mac OS X Leopard không.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>me.mpietz.MountDevRoot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>

        <string>$HOME/bin/attach-devroot.sh</string>

        <!-- Instead of using...
        <string>/Users/mpietz/bin/attach-devroot.sh</string -->
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Câu trả lời:


16

Không có trong khóa ProgramArgument. Bạn cần thêm một EnvironmentVariableskhóa vào chính tả của bạn như vậy:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnvironmentVariables</key>
    <dict>
           <key>AN_ENVIRONMENT_VARIABLE_NAME</key>
           <string>the_value</string>
    </dict>
    <key>Label</key>
    <string>me.mpietz.MountDevRoot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>

        <string>$HOME/bin/attach-devroot.sh</string>

        <!-- Instead of using...
        <string>/Users/mpietz/bin/attach-devroot.sh</string -->
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Xem: Tạo Daemon và Đại lý .


3
Chắc chắn, bạn có thể cứng mã env của bạn. vars trong plist, nhưng bạn không thể sử dụng các vars hiện có như $ HOME. Trừ khi nó chỉ là một đối số cho một kịch bản shell, trong trường hợp đó, shell (không phải launchd), sẽ mở rộng nó. Nhưng trong ví dụ này, nó thực sự có thể hoạt động nếu bạn thêm -ctùy chọn vào / bin / sh?
mivk

3

Tôi không nghĩ launchd biết về môi trường nguyên bản, ít nhất không phải là sự thay thế $ {VARIABLE}.

-cMặc dù vậy, không có gì ngăn bạn khởi chạy một tập lệnh shell (hoặc shell với ) như hành động khởi chạy của bạn và điều đó sẽ có một môi trường và tôn trọng $ {VARIABLES} - Hãy nhận biết sự khác biệt giữa các tác nhân / tác nhân của Hệ thống và Người dùng trong trường hợp đó Tuy nhiên...


1

Tôi không chắc chắn - tôi chưa từng thử nó trước đây ... nhưng tôi có thể nói với bạn rằng nếu biến duy nhất bạn quan tâm là nhà - bạn có thể sử dụng ~.

So: <string>~/bin/attach-devroot.sh</string>

1
Điều này không hoạt động. Tôi nhận được"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie

Điều này chỉ hoạt động nếu EnableGlobbingcờ được đặt thành đúng. Xem trang man launchd.plist .
Luân xa

2
EnableGlobbingkhông được hỗ trợ nữa
Liviu
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.