我需要一点帮助。我最多是个新手脚本编写者。我正在尝试编写一个 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
规则而不是以明文形式存储密码。