“ll” 的别名在哪里定义?

“ll” 的别名在哪里定义?

我经常发现自己使用ll别名。

$ type ll
ll is an alias for ls -lh

我一直想知道这是在哪里定义的,因为它对 都有效bashzsh但对 却无效sh

# THIS IS SH
$ ll
sh: 1: ll: not found

答案1

在 Ubuntu 中,此别名默认在文件中定义~/.bashrc,在我的文件中如下:

$ grep "alias ll" ~/.bashrc
alias ll='ls -alF'

另一个默认读取的文件是~/.bash_aliases。它可能在您创建之前不存在,但这是存储别名的推荐方式,因为将它们保存在单独的文件中可以提供清晰度。您的~/.bashrc包含以下部分,其中的 if 表达式在存在此别名文件时加载它:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

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

至于我假设别名在您的文件或任何由它来源的文件zsh中以相同的方式定义。如果您使用它,它可能包含在~/.zshrcoh-my-zshlib/directories.zsh或者plugins/common-aliases/common-aliases.plugin.zsh

sh(=dash在 Ubuntu 中) 只读取~/.profile,通常不包含任何别名,因为它们是特定于 shell 定义的。对于像 一样简单的别名,alias ll='ls -lh'您可以在 中找到定义~/.profile。进一步阅读:是否存在所有 shell 都读取的“.bashrc”等效文件?

答案2

对于 zsh,可以在 中添加别名.zshrcll必须在该文件中定义。

您可以使用任何文件编辑器(例如 nano)编辑它来添加别名.zshrc。例如:

alias ll="ls -lh"

答案3

我在 Manjaro Linux 上遇到了同样的问题,它默认使用Zsh ,但我alias在通常的位置找不到任何定义(例如/etc/profile,,,,等等......)/etc/zsh/zprofilegrep -rin alias /etc/*~/.zshrc

事实证明,Manjaro 安装oh-my-zsh在系统级位置下:/usr/share/oh-my-zsh/

谢谢这个答案,我能够追踪到它:

zsh -ixc : 2>&1 | grep 'll='

跟踪输出中显示的第一行找到了它:

+/usr/share/oh-my-zsh//lib/directories.zsh:37> alias 'll=ls -lh'

相关内容