覆盖依赖于发行版的 Bash 别名以表现不同

2 alias bashrc

在 Ubuntu 16.04 中,我将以下代码添加到/etc/bash.bashrc

alias ll="ls -la --group-directories-first"
Run Code Online (Sandbox Code Playgroud)

然后我重新启动。

注意:我使用/etc/bash.bashrc是因为我需要一个文件中的所有别名,并且可供所有用户使用。


我的意图是重写“本地”ll别名。然而它并没有改变;如果我转到任何包含目录和文件的目录,然后执行ll,我会得到一个列表目录没有在文件上方排序。换句话说。

我做错了什么?

Gil*_*il' 5

ll别名在默认定义.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对已存在的帐户没有影响。但即使这样也不是一个好主意,因为您所定义的是个人偏好。