バックグラウンドでエイリアスまたは関数を実行する

バックグラウンドでエイリアスまたは関数を実行する

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コマンドはパスワードの入力を求めません。

おすすめ記事