1年前に書いた記事がわりと見られているようですが,もっとスマートな方法があったので書いておきます.
ちなみに筆者はfish
ユーザですが,本記事ではbash
, zsh
ユーザ向けにもスクリプト置いておきます.
どうやるの?
proxy環境下のDNSサーバアドレスが/etc/resolv.conf
に書かれているかどうかで判断します.前記事ではSSIDを元に判断していたため,有線で繋いだ場合に対応していませんでしたが,この方法なら大丈夫です.
ちなみに,必ずしもDNSサーバアドレスである必要はなくて,proxy環境下において /etc/resolv.conf
に必ず書かれているものを指定しても当然構いません.
スクリプト
bash
, zsh
~/.switch_proxy
#!/bin/sh
proxy=hogehoge.com:XXX # プロキシアドレス
_dns="XXX.XXX.XXX.XXX" # プロキシ環境下でのDNSサーバアドレス(cat /etc/resolv.conf で確認してください)
function set_proxy() {
export http_proxy="http://$proxy"
export https_proxy="http://$proxy"
export ftp_proxy="http://$proxy"
export all_proxy="http://$proxy"
export no_proxy="127.0.0.1,localhost"
export HTTP_PROXY="http://$proxy"
export HTTPS_PROXY="http://$proxy"
export FTP_PROXY="http://$proxy"
export ALL_PROXY="http://$proxy"
export NO_PROXY="127.0.0.1,localhost"
git config --global http.proxy "http://$proxy"
git config --global https.proxy "https://$proxy"
git config --global url."https://".insteadOf git://
}
function unset_proxy() {
unset http_proxy
unset https_proxy
unset ftp_proxy
unset all_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset FTP_PROXY
unset ALL_PROXY
unset NO_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf
}
_dns_state=""
if test -e /etc/resolv.conf; then
_dns_state=$(grep $_dns /etc/resolv.conf)
fi
if test -n "$_dns_state"; then
echo -e '\e[31mSet proxy settings\e[m' 1>&2
set_proxy
else
echo -e '\e[36mUnset proxy settings\e[m' 1>&2
unset_proxy
fi
~/.bashrc(.zshrc)
source ~/.switch_proxy
fish
~/.config/fish/switch_proxy.fish
set proxy 'hogehoge.com:XXXX' # プロキシアドレス
set _dns 'XXX.XXX.XXX.XXX' # プロキシ環境下でのDNSサーバアドレス(cat /etc/resolv.conf で確認してください)
set -x http_proxy ''
set -x https_proxy ''
set -x ftp_proxy ''
set -x all_proxy ''
set -x no_proxy ''
function set_proxy
set -x http_proxy "http://$proxy"
set -x https_proxy "http://$proxy"
set -x ftp_proxy "http://$proxy"
set -x all_proxy "http://$proxy"
set -x no_proxy '127.0.0.1,localhost'
set -x HTTP_PROXY "http://$proxy"
set -x HTTPS_PROXY "http://$proxy"
set -x FTP_PROXY "http://$proxy"
set -x ALL_PROXY "http://$proxy"
set -x NO_PROXY '127.0.0.1,localhost'
git config --global http.proxy "http://$proxy"
git config --global https.proxy "https://$proxy"
git config --global url."https://".insteadOf git://
end
function unset_proxy
set -e http_proxy
set -e https_proxy
set -e ftp_proxy
set -e all_proxy
set -e no_proxy
set -e HTTP_PROXY
set -e HTTPS_PROXY
set -e FTP_PROXY
set -e ALL_PROXY
set -e NO_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset url."https://".insteadOf
end
if test -e /etc/resolv.conf
grep $_dns /etc/resolv.conf | read _dns_state
end
if test -n "$_dns_state"
echo -e '\e[31mSet proxy settings\e[m' 1>&2
set_proxy
else
echo -e '\e[36mUnset proxy settings\e[m' 1>&2
unset_proxy
end
~/.config/fish/config.fish
source ~/.config/fish/switch_proxy.fish