Linux

bashrc + 為什麼源不刷新 .bashrc 文件

  • April 6, 2022

我們將以下行添加到bashrc文件中

alias reboot="echo you not allowed to do reboot on this machine - sorry"

所以我們得到

more ~/.bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc
fi


alias reboot="echo you not allowed to do reboot on this machine - sorry"

然後我們做了

source ~/.bashrc

事實上,當我們這樣做的時候

reboot

我們有

you not allowed to do reboot on this machine - sorry

但是當我們想回到真正的重新啟動時,我們刪除了這一行 –> alias reboot="echo you not allowed to do reboot on this machine - sorry"

如下:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc
fi

然後我們刷新 bashrc

source ~/.bashrc

但是當我們嘗試重新啟動時,我們仍然會得到舊的別名:

you not allowed to do reboot on this machine - sorry

我們在這裡缺少什麼?

另一個函式範例

echo '
function reboot
{
echo "ERROR reboot command not allowed on this machine"
return 1
}
' >>/root/.bashrc

上面的例子我們不能做unalias

採購~/.bashrc不會神奇地重置所有設置。該文件只是一堆要執行的命令。如果它們在乾淨的 shell 中執行,那麼您將得到您所期望的。

但如果別名已經定義,文件中缺少它不會取消別名。想一想:如果您手動執行文件中的命令,則不會影響已定義的別名。文件中沒有unalias reboot。採購~/.bashrc是完全執行命令,而不是“手動”。

不要將.bashrc其視為保存 shell 目前設置的文件。它意味著在乾淨的外殼中自動獲取一次。人們有時會手動再次獲取它,如果他們添加一些東西,它會起作用*,因為添加的東西會被執行。被移除的東西不能被執行或神奇地恢復。啟動一個新的 shell 並.bashrc按照它的設計方式完成它的工作。

請注意,繞過別名或函式非常容易。別名或函式不是禁止重啟的好方法。


  • 它適用於第二次執行舊事物可能產生的副作用。

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