我经常发现自己使用ll
别名。
$ type ll
ll is an alias for ls -lh
我一直想知道这是在哪里定义的,因为它对 都有效bash
,zsh
但对 却无效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
中以相同的方式定义。如果您使用它,它可能包含在~/.zshrc
oh-my-zsh
lib/directories.zsh
或者plugins/common-aliases/common-aliases.plugin.zsh
。
sh
(=dash
在 Ubuntu 中) 只读取~/.profile
,通常不包含任何别名,因为它们是特定于 shell 定义的。对于像 一样简单的别名,alias ll='ls -lh'
您可以在 中找到定义~/.profile
。进一步阅读:是否存在所有 shell 都读取的“.bashrc”等效文件?
答案2
对于 zsh,可以在 中添加别名.zshrc
。ll
必须在该文件中定义。
您可以使用任何文件编辑器(例如 nano)编辑它来添加别名.zshrc
。例如:
alias ll="ls -lh"
答案3
我在 Manjaro Linux 上遇到了同样的问题,它默认使用Zsh ,但我alias
在通常的位置找不到任何定义(例如/etc/profile
,,,,等等......)/etc/zsh/zprofile
grep -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'