Alias
在兩個主機文件之間切換的簡單命令
我正在使用 /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 發生在 () 內,這是一個新程序,因此不會影響您目前的工作目錄。