Alias

在兩個主機文件之間切換的簡單命令

  • October 12, 2011

我正在使用 /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'

這是合法的嗎,我在這裡在黑暗中開槍?

你在正確的軌道上!對此有幾條評論。將這樣的多行操作留給函式通常是更好的做法。我可能會這樣寫:

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

您會注意到我還使用了絕對路徑而不是更改目錄。這通常是一個更好的主意(使用絕對路徑)。如果您確實想繼續使用親屬,那麼通常最好在子 shell 中執行此操作,這樣您就不必處理將目錄更改回 $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 發生在 () 內,這是一個新程序,因此不會影響您目前的工作目錄。

引用自:https://unix.stackexchange.com/questions/22352