【问题标题】:How to insert <ProgrammArguments> in a launchd-.plist on os x如何在 os x 上的 launchd-.plist 中插入 <ProgrammArguments>
【发布时间】:2013-12-07 10:06:33
【问题描述】:

是否可以将以下 .sh-script 完全实现到 launchd-.plist 中?

#!/bin/sh
rsync -avuz --delete -e '/usr/bin/ssh -i /Users/FOO/.ssh/id_rsa' /Users/Shared/Backup/ root@333.444.555.666:/volume1/NetBackup/BAR/

这个不行:

…
<key>ProgramArguments</key>
<array>
     <string>/usr/bin/rsync</string>
     <string>-avuz</string>
     <string>--delete</string>
     <string>-e '/usr/bin/ssh -i /Users/FOO/.ssh/id_rsa'</string>
     <string>/Users/Shared/Backup/</string>
     <string>root@333.444.555.666:/volume1/NetBackup/BAR/</string>
</array>
…

使用单独的 shell 脚本可以正常工作 - 如果没有必要,我只是不想调用脚本。

TIA

【问题讨论】:

    标签: string macos shell plist rsync


    【解决方案1】:

    -e 和它后面的字符串是单独的参数:

    <key>ProgramArguments</key>
    <array>
      <string>rsync</string>
      <string>-avuz</string>
      <string>--delete</string>
      <string>-e</string>
      <string>ssh -i /Users/FOO/.ssh/id_rsa</string>
      <string>/Users/Shared/Backup/</string>
      <string>root@333.444.555.666:/volume1/NetBackup/BAR/</string>
    </array>
    

    如果添加&lt;key&gt;EnableGlobbing&lt;/key&gt;&lt;true/&gt;,可以将/Users/FOO/替换为~/

    您也可以使用bash -c 嵌入脚本:

    <key>ProgramArguments</key>
    <array>
      <string>bash</string>
      <string>-c</string>
      <string>while sleep 5; do say a; done</string>
    </array>
    

    【讨论】:

    • 感谢您的“-e”提示......现在它就像一个魅力 - 并且不需要额外的脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2012-09-17
    • 2012-05-31
    • 2011-07-20
    • 2015-06-24
    • 2015-03-29
    • 2015-01-06
    相关资源
    最近更新 更多