在分离屏幕中运行 bash 脚本

在分离屏幕中运行 bash 脚本

我需要一点帮助。我最多是个新手脚本编写者。我正在尝试编写一个 bash 脚本来连接到我的多个 openvpn 站点。我正在尝试编写脚本以在分离的屏幕中打开。我已经设法编写脚本以通过不同的变量连接到不同的 .ovpn。让它们在分离的屏幕上运行是我遇到的问题。希望你们中的一个人能帮助我。目前我只是在运行

screen -S vpn

然后一旦屏幕打开,我就会执行脚本来连接到 openvpn 站点。 这里是我当前的 vpn 连接脚本:

#!/bin/bash

if [ "$1" = "seed-rl" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config seed-rl.ovpn
fi

if [ "$1" = "atl10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-10.ovpn
fi

if [ "$1" = "atl11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-11.ovpn
fi

if [ "$1" = "atl12" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-12.ovpn
fi

if [ "$1" = "nyc02" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-02.ovpn
fi

if [ "$1" = "nyc10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-10.ovpn
fi

if [ "$1" = "nyc11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-11.ovpn
fi

我该怎么做才能让这个脚本在分离的屏幕上运行?

答案1

您可以检查脚本是否正在内部运行screen,如果没有,请在内部重新执行它screen

#! /bin/bash

[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"

if [ "$1" = "seed-rl" ] ;
then
    cd "/home/robbiel811/vpn configs"
    echo password | sudo -S openvpn --config seed-rl.ovpn
fi

...

STY是一个由以下变量设置的screen,我们可以使用它来检测我们是否在其中运行。$0是当前正在执行的命令以及$@所有参数。

另外,考虑使用关联数组简化您的脚本:

#! /bin/bash

[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"


declare -A configs
config['seed-rl']='seed-rl.ovpn'
config['atl10']='Atlanta-10.ovpn'
# ... etc.
config['nyc11']='NewYork-11.ovpn'

cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config "${config[$1]}.ovpn"

并使用NOPASSWD sudoers规则而不是以明文形式存储密码。

相关内容