2つのホストファイルを切り替える簡単なコマンド

2つのホストファイルを切り替える簡単なコマンド

私は/ etc / hostを使用してlocalhostをWebドメインにマップしています。毎回検索して置き換えることなく、これを行う簡単な方法が必要です。私の.bashrcファイルに入れました。

alias hostchange='
nowdir=$PWD;
cd /etc;
mv hosts hoststempname;
mv hostssecondary hosts;
mv hoststempname hostssecondary;
cd $nowdir'

このエラーが発生します。 yやnはすべて進行しません。

mv: rename hosts to hoststempname: Permission denied
override rw-r--r--  root/wheel for hosts? (y/n [n]) 

sudoを追加して機能させました。

alias hostchange='
nowdir=$PWD;
cd /etc;
sudo mv hosts hoststempname;
sudo mv hostssecondary hosts;
sudo mv hoststempname hostssecondary;
cd $nowdir'

これは合法的ですか?私が暗闇の中で撮影しているのだろうか?

ベストアンサー1

あなたは正しい道を行っています!これについていくつかのコメントがあります。通常、これらの複数行の操作は関数に委ねることをお勧めします。次のように書くこともできます。

change_etc_hosts_file() {
  set -e # stop running if we encounter an error
  sudo \mv -f /etc/hosts /etc/hoststempname
  sudo \mv -f /etc/hostssecondary /etc/hosts
  sudo \mv -f /etc/hoststempname /etc/hostssecondary
  set +e
}
alias changehosts=change_etc_hosts_file

また、ディレクトリを変更する代わりに絶対パスを使用したこともわかります。一般的にこれは良い考えです(絶対パスを使用)。親戚を引き続き使用するには、通常はサブシェルでこれを行うのが最善です。これにより、ディレクトリを$ PWDに戻す操作を処理する必要がなくなります(中断すると奇妙な状態になります)。サブシェルとして実行するには:

change_etc_hosts_file() {
  ( # use subshell
    cd /etc
    set -e # stop running if we encounter an error
    sudo \rm -f hoststempname # the \ escapes aliases which might cause prompting
    sudo \cp -f hosts hoststempname
    sudo \cp -f hostssecondary hosts
    sudo \cp -f hoststempname hostssecondary
  )
}

CD は新しいプロセス () 内で発生するため、現在の作業ディレクトリには影響しません。

おすすめ記事