执行 source ~/.bashrc 或 . ~/.bashrc 即可立即生效;其他方式如 exec bash 会丢失环境,bash 子进程不改变当前终端。
怎么让
修改立刻生效,而不是新开终端?
改完
不生效,是因为当前 shell 进程没重新加载配置。它只在登录时或显式执行时读取。
用
或简写
—— 这是唯一可靠方式;
会重启 shell,但可能丢失当前环境变量和 job 状态
别用
单独启动子 shell,那只是新进程,原终端没变
如果用了
后命令不识别,先确认是否漏了
,再检查 alias 是否被后续配置覆盖(比如某些发行版的
末尾有
)
和函数哪个更适合封装常用命令?
简单替换用
,带逻辑、参数处理或条件分支必须用函数。
没问题;但
是错的——固定路径无法传参,且引号内变量不展开
要支持任意文件或关键词,得写函数:
函数还能做错误检查:
,
做不到
为什么
里加了自定义目录,命令还是找不到?
常见不是路径写错,而是权限、可执行位或 shell 缓存导致的“看不见”。
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
确认二进制有执行权限:
;
看有没有
路径必须绝对:写
不行,shell 在
中不展开
,得用
检查是否被
缓存干扰:
清单,或直接
清空整个缓存(
会记住上次找到的位置,改了
后不自动刷新)
如何安全地重写
行为而不破坏原有功能?
直接覆盖
函数容易引发递归调用或丢掉内置行为(比如
切回上一目录),得用
显式调用原生命令。
错误写法:
→ 第二个
又触发自己,无限递归
正确写法:
;
保持参数原样,
调用 shell 内置版本
想加日志又不影响交互体验?别用
直接刷屏,改用
改终端标题,更隐蔽
实际用起来最常卡住的,是
缓存和
在
里的失效——这两处不报错,只静默失败,查起来特别费时间。
~/.bashrc~/.bashrcsource ~/.bashrc. ~/.bashrcexec bashbashaliassource/etc/skel/.bashrcunaliasaliasaliasalias ll='ls -alF'alias greplog='grep ERROR /var/log/syslog'greplog() { grep "$1" "${2:-/var/log/syslog}"; }if [[ ! -r "$2" ]]; then echo "no read perm"; return 1; fialias$PATHchmod +x ~/bin/mytoolls -l ~/bin/mytoolx~/bin$PATH~$HOME/binhashhash -d mytoolhash -rhash$PATHcdcdcd -builtincd() { echo "going to $1"; cd "$1"; }cdcd() { echo "cd to $*"; builtin cd "$@"; }$@builtinechoprintf '\033]0;%s\007' "$(basename "$PWD")"hash~$PATH