在 Ubuntu 16.04 中,我添加了以下代码/etc/bash.bashrc
:
alias ll="ls -la --group-directories-first"
然后我重新启动。
注意:我使用它是/etc/bash.bashrc
因为我需要一个文件中的所有别名并且可供所有用户使用。
我的目的是重写“native”ll
别名。但它并没有改变;如果我转到任何包含目录和文件的目录,然后执行ll
,我会得到一个列表没有目录在文件上方排序。换句话说。
我做错了什么?
答案1
别名ll
是在 default 中定义的.bashrc
。
别名定义是一个命令。 Bash 是一种命令式语言,它一个接一个地执行命令。如果同一别名有多个定义,则每次 shell 执行其中一个定义时都会重新定义该别名。因此最后一个定义获胜。
当bash启动时,它会先读取系统文件,/etc/bash.bashrc
然后再读取用户文件~/.bashrc
。因此, 中的定义~/.bashrc
会覆盖 中相同别名的任何定义/etc/bash.bashrc
。你不能(理智地)做任何事情来/etc/bash.bashrc
阻止 中的重新定义~/.bashrc
。
给用户强加方便的别名是没有意义的。这就是为什么ll
在 中定义~/.bashrc
而不是在 中定义的原因/etc/bash.bashrc
。因此,不要将您首选的定义放在系统文件中,而是将其放在用户文件中。
您可以更改默认值.bashrc
- 即/etc/skel/.bashrc
.创建用户帐户时,此文件会复制到用户的主目录。更改文件/etc/skel
对现有帐户没有影响。但即使这也不是一个好主意,因为您所定义的是个人偏好。
答案2
/etc/bash.bashrc
适用于所有用户
~/.bashrc
仅适用于主文件夹所在的用户。
ll
因此,如果您更改中的别名/etc/bash.bashrc
并运行ll
,您将获得 中定义的别名的输出~/.bashrc
,这是因为~/.bashrc
它优先于 中的定义/etc/bash.bashrc
。
简而言之;添加新的中的别名/etc/bash.bashrc
,但要重写,请更改~/.bashrc
.
编辑:
如果您确实想将所有内容都放在一个文件中,请从所有用户的所有~/.bashrc
~/.bash_profile
和/或~/.profile
文件中删除所有别名,然后将所有别名添加到此/etc/bash.bashrc
文件中,这将创建一个没有任何问题的全局别名配置。
编辑2:
创建或编辑/etc/skel/.bashrc
并复制默认.bashrc
配置,以便在创建新用户时不会设置默认别名。
感谢@user4556274 的编辑建议。
答案3
我相当确定/etc/bash.bashrc
这不是一件事。您正在寻找的文件是$HOME/.bash_profile
OR$HOME/.profile
或者您可以使用,$HOME/.bashrc
但我认为profile
这是您想要完成的任务的正确文件。
.bash_profile
有关和之间差异的解释,.bashrc
请参阅:http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
要来源.profile
,.bash_profile
请将以下内容添加到您的.bash_profile
:
if [ -f ~/.profile ]; then
. ~/.profile
fi
另一个潜在的选择是放入insidell
而不是 an ,我相信该函数将优先于任何具有相同名称的别名集。function
/etc/bash.bashrc
alias
ll () {
ls -la --group-directories-first
}