定义新别名和函数后刷新别名和函数?


55

当我在.bash_aliases文件中定义一个新别名或文件中一个新函数时.bashrc,是否有一些刷新命令可以立即使用新别名或函数而无需关闭终端(在我的情况下,xfce4-terminal中打开了几个选项卡,打开了许多文件在工作的中间)?


6
请注意,在所有打开的终端/选项卡中都没有使该新命令已知的命令。您必须在打开的每个shell中执行. .bashrcsource .bashrc
Paul Tomblin,

Answers:


66

输入更改后的文件将提供对当前终端中新编写的别名或函数的访问,例如:

source ~/.bashrc

另一种语法:

. ~/.bashrc

请注意,如果您的终端中运行了很多bash实例(您提到了多个选项卡),则必须在每个实例中都运行它。


3
source是csh衍生的。本伯恩壳的方法是. .bashrc
Paul Tomblin,

有趣的是,当我定义时这是行不通的alias prg='prg.py'。我必须关闭终端。
xralf 2011年

“您将不得不在每个实例中运行它。” -请注意,zsh用户可以适当地将TMOUT和TRAPALRM设置为stat,并且(如有必要)每秒一次或以任何其他合理间隔重新配置〜/ .zshrc。我不相信bash可以做到这一点。
凯文

6

. ~/.bashrc在命令行上键入将运行.bashrc,因此将创建该文件中定义的所有功能。

.bashrc如果其中包含以下代码,则它本身也将调用并运行.bash_aliases如果存在).bashrc

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

. ~/.bash_aliases单独使用(例如,在命令行中)将仅在.bash_aliases不涉及.bashrc的情况下尝试并运行,并且如果文件不存在将给出错误(因此,在时进行文件检查.bashrc)。


2

有时您会想要将别名转换为函数,但是当您获取bashrc文件的源时,可能会发生奇怪的错误:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

这可能是由于别名与新定义函数的名称冲突而发生的。据我所知,要避免这种情况,需要对所有内容进行混叠处理,然后提供bashrc文件的来源:

bash-4.3 $
unalias -a && . $HOME/.bashrc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.