明白了,可以将 ./clash -d . 放到后台运行,并在脚本启动时设置代理。以下是修改后的脚本:

#!/bin/bash

# 设置 Ubuntu 网络代理(HTTP、HTTPS 和 SOCKS)
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890
gsettings set org.gnome.system.proxy.https host '127.0.0.1'
gsettings set org.gnome.system.proxy.https port 7890
gsettings set org.gnome.system.proxy.socks host '127.0.0.1'
gsettings set org.gnome.system.proxy.socks port 7891

# 启动 Clash 并将其放到后台运行
./clash -d . &
CLASH_PID=$!

echo "访问 https://clash.razord.top/#/proxies 可以进行切换节点、测延迟等操作。"

# 捕获终止信号(例如 Ctrl+C)
trap 'cleanup' INT TERM

cleanup() {
    echo "停止脚本,关闭网络代理..."

    # 关闭 Ubuntu 网络代理
    gsettings set org.gnome.system.proxy mode 'none'

    # 停止 Clash
    kill $CLASH_PID

    exit 0
}

# 等待 Clash 进程结束
wait $CLASH_PID

# 停止脚本,关闭网络代理(如果因其他原因退出)
cleanup

保存该脚本为 start_clash.sh,然后给它可执行权限:

chmod +x start_clash.sh

运行脚本:

./start_clash.sh

在这个版本中,Clash 将在后台运行(&),并且脚本会继续执行。我们使用 trap 捕获终止信号,当脚本终止时会调用 cleanup 函数来关闭代理和停止 Clash。 wait $CLASH_PID 用于等待 Clash 进程结束,如果因为其他原因退出, cleanup 函数也会被调用。