リモート作業が増えて、何かと「あーVPN繋がなきゃ」とかなるんですよね。
そして作業が終わってからVPNの接続を切り忘れる...
処理中だけVPNに繋がってくれてればいいのに...
そんなシェルを作りました
vpn
#!/bin/bash -euif[$# == 0 ]then
echo'vpn [on|off|pass "command"]'exit 1
fi
NETWORK_NAME=$(networksetup -listallnetworkservices | grep VPN)
off (){
networksetup -disconnectpppoeservice$NETWORK_NAME}
on (){
networksetup -connectpppoeservice$NETWORK_NAME}case$1in'off')
off
;;'on')
on
;;'pass')
on
trap off exit
eval$2esac使い方
※ 名前に「VPN」と入っているネットワークが1つしかない想定で、そのネットワークに接続するシェルになっています
- 上記のシェルを
vpnと名付けて、 chmod 744 vpn(実行権限を付与)- PATHが通っている場所においてください
(私は自作シェル置き場($HOME/binなど)を作って、.bash_profileや.zshrcにexport PATH=PATH:$HOME/binと書いてあります)
例えば、Web開発をしていて、フロントはローカルで起動するけど、APIはVPNを繋いだ先にある場合。$ yarn serverでローカルサーバーが起動するときは、
$ vpn pass "yarn server"これで、サーバー終了時にVPNも自動的に切れます。
trap
シェルの trap ~ exitという行でこれを実現しています。exitのところは errなども指定できるので、任意の終了シグナルに応じて処理を設定できるはずです。(やってみてない)
ただ、強制終了(9)は受け取れないようで、例えば、サーバーを起動しているvscodeのウインドウをそのまま閉じると、設定した処理は実行されません...
きもち
本当は、文字列としてコマンドを渡すなんてしたくない...
何か良い方法があったら教えて下さい...