Help us understand the problem. What is going on with this article?

hostsを変更するためのコマンド

2018/12/15 : 使用中のhostsパターンを確認できるようなコードを追記

作った理由

Macでhostsを変更するたびに、vimで変更させるのだるい...って思ったので、コマンド作りました。

GitHub

https://github.com/prune2525/change_hosts

コード

var=$1

#check
if [ -z $var ]; then
  exit
else
  case "$var" in
    #your host key
    "xxx" ) : ;;
    "chk" )
    if [ -d $HOME/hosts/.chk/ ]; then
        basename $HOME/hosts/.chk/*
        exit
    else
        :
    fi
    ;;
    * ) exit ;;
  esac
fi

mm=`date +'%Y%m%d'`

cd $HOME
if [ -d "hosts" ]; then
  :
else
  #Initial activation
  #mkdir
  mkdir hosts
  cd hosts
  mkdir backup .chk "your directory"
  find . -name "hosts*" -type d -exec cp /etc/hosts {} \;
  echo "hosts update..."
  exit
fi

#backup
cp -f /etc/hosts $HOME/hosts/backup/hosts_bk_$mm

#check
if [ -d $HOME/hosts/.chk/ ]; then
 rm $HOME/hosts/.chk/*
fi
touch $HOME/hosts/.chk/$var

#main system
#change_hosts
case "$var" in
  "xxx" ) cp $HOME/hosts/"your directory"/"xxx" $HOME/hosts/"xxx"/hosts && sudo cp -f $HOME/hosts/"your directory"/hosts /etc/hosts && rm $HOME/hosts/"your directory"/hosts ;;
  #Add as you like
esac

exit

処理の流れと使い方

コマンドの使用方法

change_hosts {key}

keyとは切り替えるための文字列になります。
下記の箇所でkey($var)を実行時にチェックしています。
正しくない場合は、処理を終了させています。
chkが入力された場合は、ディレクトリの存在チェックを行い、.chkにあるファイル名を表示させる。

#check
if [ -z $var ]; then
  exit
else
  case "$var" in
    #your host key
    "xxx" ) : ;;
    #hosts check!
    "chk" )
    if [ -d $HOME/hosts/.chk/ ]; then
        basename $HOME/hosts/.chk/*
        exit
    else
        :
    fi
    ;;
    * ) exit ;;
  esac
fi

該当のkeyの場合は、下記の通り処理をします。
ここでは、$HOME直下にhostsディレクトリが存在するかチェックします。
このコマンドを最初に実行した場合は、elseの処理に入り、hostsディレクトリ及びディレクトリに現在のhostsをコピーし、処理は終了します。
※ディレクトリ生成・コピー後に処理を中断させる理由としては、hostsは人によって設定するものが違うため、各々で修正することをかねてです。(不親切かもしれませんが...)

cd $HOME
if [ -d "hosts" ]; then
  :
else
  #Initial activation
  #mkdir
  mkdir hosts
  cd hosts
    #ここは任意のディレクトリを追加指定ください。
  mkdir backup .chk "your directory"
  find . -name "hosts*" -type d -exec cp /etc/hosts {} \;
  echo "hosts update..."
  exit
fi

上記で、ディレクトリ生成・hostsのコピー・修正などが完了した後、実行すると下記が実行されます。
実行内容は、backupディレクトリにbackupされます。
$varに一致した内容のhostsを/etc/hostsに上書きを行います。
.chkディレクトリはchkeck用のファイルを格納します。
下記の、#checkはディレクトリ存在チェックを行った後、.chkの中を削除します。
削除が完了したら、この時の引数でtouch $HOME/hosts/.chk/$varします。
touchでできたファイルが、現在のhostsを確認するためのファイルになります。

#backup
cp -f /etc/hosts $HOME/hosts/backup/hosts_bk_$mm

#check
if [ -d $HOME/hosts/.chk/ ]; then
 rm $HOME/hosts/.chk/*
fi
touch $HOME/hosts/.chk/$var

#main system
#change_hosts
case "$var" in
  "xxx" ) cp $HOME/hosts/"your directory"/"xxx" $HOME/hosts/"xxx"/hosts && sudo cp -f $HOME/hosts/"your directory"/hosts /etc/hosts && rm $HOME/hosts/"your directory"/hosts ;;
  #Add as you like
esac

exit

最後に

GitHubで提供はしていますが、hostsは人によって違うものなので同じhostsは組織とかでなければ存在しないかと思っています。(いじらない人にとっては一緒ですが)
なので、このコードは基本的にはいじらないと機能しませんので、お手数ですが使用したい方は修正して使用してあげてください。

引用

Macで自作コマンドを使う方法

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away