![在重新加载 .bashrc 之前,cd && ls 函数在其他别名中不起作用?](https://linux22.com/image/126604/%E5%9C%A8%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%20.bashrc%20%E4%B9%8B%E5%89%8D%EF%BC%8Ccd%20%26%26%20ls%20%E5%87%BD%E6%95%B0%E5%9C%A8%E5%85%B6%E4%BB%96%E5%88%AB%E5%90%8D%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我的中有以下代码.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
更具描述性(并且您实际上不需要将其键入,因为它是别名的一部分,因此您不会“丢失”任何内容),并且它表现为变量,而事实~
并非如此。看为什么波形符 (~) 不在双引号内展开?