在后台运行别名或函数

在后台运行别名或函数

我正在从我的 Linux Mint 19.1 机器连接到 OpenVPN 服务器。由于网络管理器未正确设置路由,因此使用 GUI 进行连接,我通过执行以下命令进行连接:

sudo openvpn --config <config-file.ovpn> &

为了让事情变得更容易,我使用特定的树结构将所有 VPN 设置存储在隐藏文件夹中。我想定义一个别名或一个函数,使用特定的 VPN 设置执行上述命令,以便我可以从任何地方调用它。
我已将以下内容添加到我的 .bashrc 中

alias OpenVPN='read -p "VPN name: " VPN_NAME
my_path=~/.openvpn.confs/${VPN_NAME}/OpenVPN
VPN_CONF=${my_path}/vpnconfig.ovpn
sudo openvpn --config $VPN_CONF'

这很好用,但我必须保持终端在运行时保持打开状态交互的模式。我想让它启动并在后台运行,所以我在最后一个命令中添加了一个“&”,如果我从终端手动调用该命令,它就可以正常工作。sudo openvpn --config $VPN_CONF &但是当我将其添加到别名中时,系统仍然认为它在后台持续运行,但连接不起作用。
我还尝试将其作为函数运行,但也无法连接。

OVPN() { sudo openvpn ~/.openvpn.confs/"$@"/OpenVPN/vpnconfig.ovpn & }

对于如何解决这个问题有什么建议吗?

答案1

看到后这个关于后台 sudo 的答案并进行了一些试验和错误,我通过在后台执行命令之前单独验证用户权限来解决这个问题:

alias OpenVPN='read -p "VPN name: " VPN_NAME
my_path=~/.openvpn.confs/${VPN_NAME}/OpenVPN
VPN_CONF=${my_path}/vpnconfig.ovpn
sudo -v
sudo openvpn --config $VPN_CONF'

这里sudo -v代表证实,这意味着它无需运行命令即可验证并更新用户 sudo 时间戳。完成此操作后,以下 sudo 命令不会提示输入密码,因为密码已经提供。

相关内容