【问题标题】:Run terminal command on startup with launchd.plist使用 launchd.plist 在启动时运行终端命令
【发布时间】:2016-10-06 17:36:50
【问题描述】:

我在 stackoverflow 上寻找我的问题的答案并找到了一个线程 (https://superuser.com/questions/229773/run-command-on-startup-login-mac-os-x)。这就是我发现launchd.plist并自己制作了一个:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>js.leapmotion</string> 
    <key>OnDemand</key>
    <false/>

    <key>ProgramArguments</key>
    <array>
            <string>open</string>
            <string>/Applications/Utilities/Terminal.app</string>
    </array>

    <key>LaunchOnlyOnce</key>
    <true/>
</dict>
</plist>

这确实在启动我的 mac 后启动了我的终端。但现在我希望它导航到一个目录并在那里运行命令gulp。 这将再次完成其余的工作,打开一个本地主机等等......

所以最后我只需要在特定目录中运行gulp。就这样。如果 launchd.plist 不是最好的方法,那么我愿意接受替代方案。 否则我想知道如何告诉终端它应该运行什么命令。

感谢您的提示。 干杯

J

【问题讨论】:

    标签: macos plist startup boot launchd


    【解决方案1】:

    您可以使用open 命令打开终端并使用-a 标志运行脚本。例如,open -a Terminal /path/to/myscript 将打开一个新的终端窗口并运行myscript。请注意,当myscript 完成时,会话将终止(即没有外壳)。要更改它,您可以运行 bash 或任何您喜欢的 shell 作为脚本的一部分。

    在您的情况下,我建议创建一个基本脚本来执行您希望终端执行的任何操作,例如:

    #!/usr/bin/env bash
    
    cd /path/to/your/directory
    /usr/bin/gulp
    

    保存它(确保它是可执行的),然后更改您的启动 plist 以匹配:

    <key>ProgramArguments</key>
    <array>
            <string>open</string>
            <string>-a</string>
            <string>Terminal</string>
            <string>/path/to/yourscript</string>
    </array>
    

    【讨论】:

    • 我尝试了你的建议,但我无法让它发挥作用。也许是因为我对shell和bash等还不太了解。我按照你的建议编写了这个脚本,并将它保存到filename.command。后缀command可以吗?我也让它可执行。与chmod +x。在这两者之间,我将它命名为filename.sh。这也不起作用。如果我双击该文件,它会按预期启动并在正确的目录中运行 gulp。我还按照您的建议调整了启动的 plist。但这只是在启动后不执行......我忘了什么吗?
    • 终端启动了吗?如果是这样,您能否使用脚本、launchd 文件和终端输出添加到您的答案中。
    • 当然。一旦我回到那台机器上。顺便提一句;我可以在某处激活有关 cmets 的电子邮件通知吗?昨天我完全错过了你的答案。
    • 好吧,我又试了一次,终端根本没有启动,所以我没有输出。我还在我的回答中再次发布了我当前的 plist 文件和 .command 文件(尽管我的编辑需要先审查。我不知道谁会这样做......)我还想问一下,@ 有多重要987654333@ 命令?因为如果我这样做,我会得到:Path had bad ownership/permissions 所以我到了这里:stackoverflow.com/questions/28063598/… 但这没有帮助..
    • 任何针对特定用户的启动代理都应该进入用户的库目录 (~/Library/LaunchAgents),而不是系统目录 (/Library/LaunchAgents )。同样,不应使用 sudo 加载启动代理。只需执行launchctl load ~/Library/LaunchAgents/js.leapmotion.plist(文件名必须与 plist 中的标签匹配)。如果仍有问题,请在 Console.app 中查找launchd 输出
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2010-11-19
    • 2019-10-21
    • 2021-03-04
    • 2018-12-12
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多