bashrc + 为什么源不刷新 .bashrc 文件

bashrc + 为什么源不刷新 .bashrc 文件

我们将以下行添加到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

答案1

采购~/.bashrc不会神奇地重置所有设置。该文件只是一堆要执行的命令。如果它们在干净的 shell 中执行,那么您将得到您所期望的结果。

但如果别名已经定义,文件中缺少别名也不会取消别名。想想看:如果您手动执行文件中的命令,则不会影响已定义的别名。unalias reboot文件里没有。采购~/.bashrc实际上就是执行命令,只是不是“手动”执行。

不要将其.bashrc视为保存 shell 当前设置的文件。它的意思是有来源的一旦进入干净的外壳,就会自动。人们有时会再次手动获取它,如果他们添加一些东西,它就会起作用*,因为添加的东西会被执行。被删除的东西不能被执行或神奇地恢复。启动一个新的 shell,并.bashrc按照其设计的方式完成其工作。

请注意,绕过别名或函数是非常容易的。别名或函数不是禁止重新启动的好方法。


* 它适用于第二次执行旧事物可能产生的副作用。

相关内容