在重新加载 .bashrc 之前,cd && ls 函数在其他别名中不起作用?

在重新加载 .bashrc 之前,cd && ls 函数在其他别名中不起作用?

我的中有以下代码.bashrc

c() { cd "$@" && ls -a ; }
alias cdd="c ~/Downloads"
alias r=". ~/.bashrc"

当我加载新终端时,cdd在执行命令之前不起作用r。但这样做之后,它就按预期工作了。为什么是这样?

我问同样的问题几个月前在 Stack Overflow 上,但没有一个回复能够给我一个可行的解决方案。这是我的点文件的链接如果这有什么用的话。

编辑 type -a c cdd r产生:

c is aliased to `clear'
c is a function
c () 
{ 
    cd "$@" && ls --color=auto -a
}
cdd is aliased to `c ~/Downloads'
r is aliased to `. ~/.bashrc'

根据这些信息,我将c函数更改为d,并且它可以工作。话虽如此,有什么办法可以不将 clear 函数映射到 c(因为我已经alias cs='printf "\033c"'这样做了)?我查看了一下,.bashrc但找不到任何带有“clear”一词的内容。

答案1

如果c是别名,clear但不在您自己的 shell 初始化文件中,那么它很可能是在 下的系统范围初始化文件中完成的/etc。例如,检查/etc/bash.bashrc(或参阅bash手册了解使用的文件,这可能因系统而异,具体取决于bash构建方式)。

无论在何处c别名为clear,您都可以c在将其定义为函数之前取消别名

unalias c

您也可以考虑使用$HOME代替~.这是因为$HOME更具描述性(并且您实际上不需要将其键入,因为它是别名的一部分,因此您不会“丢失”任何内容),并且它表现为变量,而事实~并非如此。看为什么波形符 (~) 不在双引号内展开?

相关内容