실행 된 스크립트에서 환경 변수 사용


21

ProgramArgumentsMac OS X Leopard의 luanchd 스크립트 부분에 envrionment 변수를 지정할 수 있는지 궁금합니다 .

<?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 키에 없습니다. EnvironmentVariablesplist의 dict에 키를 다음과 같이 추가해야합니다 .

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

시작 데몬 및 에이전트 작성을 참조하십시오 .


3
물론 환경을 하드 코딩 할 수 있습니다. plist에는 vars가 있지만 $ HOME과 같은 기존 vars는 사용할 수 없습니다. 쉘 스크립트에 대한 인수가 아니라면 쉘 (실행되지 않음)이이를 확장합니다. 그러나이 예에서는 -c/ bin / sh에 옵션을 추가하면 실제로 작동 할 수 있습니다 .
mivk

3

나는 launchd가 적어도 $ {VARIABLE} 대체물이 아니라 기본적으로 환경에 대해 알고 있다고 생각하지 않습니다.

실행 된 -c조치로 쉘 스크립트 (또는를 사용하여 쉘)를 시작하는 것을 막을 수있는 것은 없으며 환경과 $ {VARIABLES}를 존중해야합니다.이 경우 시스템과 사용자 데몬 / 에이전트의 차이점에 유의하십시오. 그래도...


1

확실하지 않습니다-전에 시도하지는 않았지만 관심있는 유일한 변수가 집이라면 ~를 사용할 수 있다고 말할 수 있습니다.

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

1
작동하지 않습니다. 나는 다음을 얻는다"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie

EnableGlobbing플래그가 true로 설정된 경우에만 작동 합니다. 참고 항목 launchd.plist man 페이지를.
sakra

2
EnableGlobbing더 이상 지원되지 않음
Liviu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.