Bash 如何在使用mac登录时正确地自动运行shell脚本?

Bash 如何在使用mac登录时正确地自动运行shell脚本?,bash,macos,shell,vpn,launchd,Bash,Macos,Shell,Vpn,Launchd,我仍在学习网络以及随之而来的术语;所以如果我说错了,请随时纠正我 目前,我的调制解调器/路由器通过以太网电缆直接连接到mac电脑,我的路由器调制解调器通过wifi连接到VPN路由器。由于两个连接同时运行,我将以太网设置为主要连接,因为我不希望所有流量不必要地通过VPN运行。然而,当我想要访问VPN的LAN时,我必须将我的wifi设置为我的主网络,如果我只是快速地想要访问某个东西,这可能会很乏味。为了使这更容易,我有一个bash脚本,它将向我的路由表中添加静态路由来解决这个问题。我还编写了一个.p

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

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

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

#!/bin/bash

USERNAME=$1

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
My.plist文件如下所示,存储在My/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>

标签
本地航线
节目
/用户/x/Desktop/Routes.sh
运行负荷

目前,这一过程还不起作用;这是因为我的代码中有错误,还是因为特权问题,我不确定。当我使用sudo权限直接从CLI运行bash脚本时,它确实可以正常工作。感谢您的帮助。谢谢。

您正在尝试运行需要root权限的命令。您不能使用以用户身份运行的启动代理来执行此操作


您可以使用登录脚本来完成。经过身份验证后,登录脚本以root用户身份运行。请参阅以了解如何设置登录脚本。

您正在尝试运行需要root权限的命令。您不能使用以用户身份运行的启动代理来执行此操作


您可以使用登录脚本来完成。经过身份验证后,登录脚本以root用户身份运行。请参阅以了解如何设置登录脚本。

尝试将
~/Desktop/Routes.sh
更改为
/Users/Austin/Desktop/Routes.sh
(或者将您的登录名替换为
Austin
)。谢谢,但它仍然不起作用。如果不打开CLI,使用sudo并键入密码,我甚至无法手动运行.sh文件。如果我尝试使用>CLI打开,它会显示“管道破裂”和“权限被拒绝注销”。因此,我认为当系统尝试自动化该过程时,可能会出现相同的问题。请尝试将
~/Desktop/Routes.sh
更改为
/Users/Austin/Desktop/Routes.sh
(或者将您的登录名替换为
Austin
)。谢谢,它仍然不起作用。如果不打开CLI并使用sudo执行此操作并键入密码,我甚至无法手动运行.sh文件。如果我尝试使用>CLI打开,它会显示“断管”和“拒绝权限注销”因此,我假设当系统尝试自动化流程时,同样的问题也可能发生。