如何在使用 mac 登录后自动正确 运行 一个 shell 脚本?

How can I properly run a shell script automatically upon login with my mac?

我仍在学习网络以及与之相关的术语;所以如果我说错了,请随时纠正我。

我目前通过以太网电缆将我的 modem/router 直接连接到我的 mac,并且我将 VPN 路由器连接到我的 mac 上连接到我的路由器调制解调器通过无线网络。在两个连接同时 运行ning 的情况下,我将以太网设置为主要网络,因为我不希望所有流量 运行ning 都不必要地通过 VPN。然而,当我想访问 VPN 的 LAN 时,我必须将我的 wifi 设置为我的主 wifi,如果我只是想快速访问某些东西,这可能会很乏味。为了使这更容易,我有一个 bash 脚本,它将向我的路由 table 添加静态路由来解决这个问题。我还编写了一个 .plist 文件,希望每次重新启动计算机时 运行 自动执行此脚本。我相信 bash 脚本和 plist 文件中的代码都是正确的,但我不认为 bash 脚本会因为需要 sudo 权限而正确执行。我读到不建议尝试绕过这个,所以我想知道是否有替代方法或方法在登录时提示我输入密码并将脚本 运行 并允许自动化过程照顾其余的。

我的 bash 脚本如下所示并存储在我的桌面上:

#!/bin/bash

USERNAME=

if [ $USERNAME == 'XXX' ]
 then
    route -n add 192.168.x.x/24 192.168.x.x
    route -n add 192.168.x.x/24 192.168.x.x 
    route -n add 192.168.x.x/24 192.168.x.x
elif [ $USERNAME == 'YYY']
 then
   route -n add 192.168.x.x/24 192.168.x.x 
   route -n add 192.168.x.x/24 192.168.x.x 
   route -n add 192.168.x.x/24 192.168.x.x
fi

我的 .plist 文件看起来像这样并存储在我的 /Users/x/Library/LaunchAgents:

<?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>local.routes</string>   
    <key>Program</key>
    <string>/Users/x/Desktop/Routes.sh</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

现在,这个过程目前没有工作;我不确定这是因为我的代码错误还是因为特权问题。当我直接从具有 sudo 权限的 CLI 运行 bash 脚本时,它确实可以正常工作。任何帮助表示赞赏。谢谢。

您正在尝试 运行 需要 root 权限的命令。您不能使用 运行 作为您的用户的启动代理来做到这一点。

您可以使用登录脚本来完成。登录脚本 运行s 作为 root,在你通过身份验证之后。请参阅 “Customizing Login and Logout” 了解如何设置登录脚本。