ใช้ตัวแปรสภาพแวดล้อมในสคริปต์ launchd


21

ฉันอยากรู้ว่าเป็นไปได้หรือไม่ที่จะระบุตัวแปรสภาพแวดล้อมในProgramArgumentsส่วนของสคริปต์ luanchd บน Mac OS X Leopard

<?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>

คำตอบ:


16

ไม่ได้อยู่ในคีย์ ProgramArguments คุณจำเป็นต้องเพิ่มEnvironmentVariablesรหัสลงใน dict ของ Plist เช่น:

<?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>

โปรดดู: การสร้าง Daemons และ Agent ที่เปิดใช้งาน


3
แน่นอนว่าคุณสามารถรหัสยาก env ของคุณ vars ใน plist แต่คุณไม่สามารถใช้ vars ที่มีอยู่เช่น $ HOME ยกเว้นว่ามันเป็นเพียงข้อโต้แย้งของเชลล์สคริปซึ่งในกรณีนี้เชลล์ (ไม่ใช่ launchd) จะขยายออก แต่ในตัวอย่างนี้อาจใช้งานได้จริงถ้าคุณเพิ่ม-cตัวเลือกใน / bin / sh?
mivk

3

ฉันไม่คิดว่า launchd รู้เกี่ยวกับสภาพแวดล้อมอย่างน้อยก็ไม่ใช่ $ {VARIABLE} แทน

ไม่มีอะไรหยุดคุณจากการเปิดตัวเชลล์สคริปต์ (หรือเชลล์ด้วย-c) ในขณะที่การกระทำของคุณเรียกใช้งานและนั่นจะมีสภาพแวดล้อมและเคารพ $ {VARIABLES} - ระวังความแตกต่างระหว่าง System และ User daemons / เอเจนต์ในกรณีนั้น แต่ ...


1

ฉันไม่แน่ใจ - ฉันไม่เคยลองมาก่อน ... แต่ฉันสามารถบอกคุณได้ว่าหากตัวแปรเดียวที่คุณสนใจคือบ้านคุณสามารถใช้ ~

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

1
มันใช้งานไม่ได้ ฉันได้รับ"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie

ใช้งานได้EnableGlobbingก็ต่อเมื่อตั้งค่าสถานะเป็นจริง ดูหน้า man launchd.plist
Sakra

2
EnableGlobbingไม่รองรับอีกต่อไป
Liviu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.