我在 中有几个别名.bash_aliases
。我c
按如下方式定义了别名,但它不能正常工作:
...
alias cd='cd; ls -r --time=atime'
alias c='cd'
...
里面.bashrc
有一行:
alias ls='clear; ls --color=auto'
Commandnandc
现在输出错误。它应该给出与 相同的输出
cd; clear; ls -r --time=atime --color=auto
。
其他问题:当我打字时,cd dir
我应该留在里面,但结果dir
我却在里面。$HOME
我该如何解决这个问题并改进别名的定义?被.bash_aliases
解释为regular grammar
?
答案1
使用函数代替,优点是可以传递参数和更清晰的语法。
function cd() {
command cd "$@"
ls -r --time=atime
}
function c() {
cd "$@"
}
function ls() {
clear
command ls --color=auto "$@"
}
(command
是一个bash
内置命令,用于引用真正的命令,而不是同名的函数)。
答案2
c
应该完全等同于cd
.我希望您会看到cd dir
与 from相同的错误c dir
,并且c
仅此而已。
cd
不会按照您定义的方式工作,因为别名执行简单的文本替换。cd dir
被扩展为cd; ls -r --time=atime dir
.别名几乎仅限于为命令提供较短的名称或提供默认选项,例如alias c=cd
或alias cp='cp -i'
。对于更复杂的事情,例如运行多个命令,请使用函数。
cd () {
command cd "$@" &&
ls -r --time=atime
}
也可以看看别名、函数、脚本,如何将参数传递给别名?。