可以重写cd命令为shell函数,在切换目录后自动执行ls,同时保留原生cd的所有行为;通过builtin cd "$@"确保兼容性,&&保证仅成功时执行ls -af,并支持增强版自定义参数与隐藏文件开关。

<p>可以重写 <strong>cd</strong> 命令为一个 Shell 函数,在切换目录后自动执行 <strong>ls</strong>,同时保留原生 <strong>cd</strong> 的所有行为(比如支持 <code>-</code>、<code>~</code>、环境变量展开等)。</p>
<h3>用函数包裹原生 cd 并追加 ls</h3>
<p>在 <strong>~/.bashrc</strong> 或 <strong>~/.zshrc</strong> 中定义如下函数:</p>
<p><font color="#2a5800">cd() { builtin cd "$@" && ls -AF; }</font></p>
<p>说明:</p>
- builtin cd 确保调用的是 Shell 内置的 cd,避免递归调用自己
-
"$@" 完整传递所有参数(包括空格、横杠选项等),兼容
cd -、cd ~/dir、cd ..等用法 - && 保证只在 cd 成功时才执行 ls,失败不显示错误列表
-
ls -AF 显示文件并标注类型(
/表示目录,@表示符号链接,*表示可执行文件)
增强版:支持自定义 ls 参数和隐藏点文件开关
如果希望更灵活,比如默认不显示隐藏文件,但允许临时开启:
cd() { builtin cd "$@" && { [[ "${1#-}" = "A" ]] && ls -AF || ls -F; } }
或更推荐的方式——用独立变量控制行为:
CD_SHOW_HIDDEN=false
cd() { builtin cd "$@" && { $CD_SHOW_HIDDEN && ls -AF || ls -F; }; }
之后可通过 CD_SHOW_HIDDEN=true cd dir 临时启用显示隐藏文件。
注意兼容性与副作用
重写 cd 后需留意:
- 某些脚本依赖 cd 的静默行为,若在非交互式 Shell 中运行可能出问题(建议仅在交互式配置中启用)
- Zsh 用户可考虑用 chpwd 钩子替代函数重写,更安全:
chpwd() { ls -F; } - 若想跳过某些目录(如
/tmp)不自动列文件,可在函数内加路径判断逻辑
生效与验证
保存配置后执行:
source ~/.bashrc(或 ~/.zshrc)
测试命令:
-
cd /etc→ 应立即列出内容 -
cd ..→ 正常返回上层并显示 -
cd -→ 切回前一目录并展示 -
cd nonexistent→ 报错且不执行 ls











