ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Bash Alias 完全指南:从文本替换机制到运行失效排查

Bash Alias 完全指南:从文本替换机制到运行失效排查 在实际使用 Linux 或 macOS 的过程中Bash AliasBash 别名是最常见也最容易上手的一组配置但它并没有表面上看起来那么简单。很多人在~/.bashrc里堆了几十行 alias以为重启终端就会一直生效结果换一台机器、写一个脚本、或者把一个命令放到 systemd 服务里执行就发现别名完全静默失效。之所以出现这些问题是因为 alias 的生效范围、加载时机和替换方式经常被忽略。要掌握 Bash Aliases 的完整使用链路需要先讲清楚它到底替换了什么、什么时候加载、为什么只在交互式 shell 生效、如何设置临时别名和永久别名、如何用函数补足 alias 的短板再处理真实项目中常见的排查方法和维护清单。1. 理解 Bash Alias 的工作机制先搞清楚它替换了什么1.1 alias 的本质是文本替换alias 的机制可以简单概括为在 Bash 读取并执行命令之前先把命令中的单词替换成别名后面的字符串。例如你定义alias llls -alF之后在终端里输入llBash 在真正执行命令前会把这一行内容替换成ls -alF然后再执行。所以 alias 的本质不是创建一个新命令而是给已有命令定义一层文本别名。既然是文本替换它就有一个关键特征alias 不会理解参数、不会判断上下文也不会考虑你当前目录是否安全它只是做一层纯文本映射。很多人会把 alias 和 shell 函数混为一谈实际上它们不是同一个层级的东西。alias 适合非常短、不需要复杂逻辑、不需要接收参数并做分支判断的场景一旦涉及参数处理、条件判断、循环、管道组合就应该使用函数。这一点会在后面的进阶章节展开。1.2 为什么需要 alias缩短高频操作和降低误操作概率使用 alias 有两个主要原因。第一个原因是缩短高频命令。例如alias llls -alF alias ..cd .. alias ...cd ../.. alias gsgit status alias gpgit pull --rebase alias glgit log --oneline --graph --all --decorate这类别名把长命令压缩成几个字符既提高输入效率也减少长命令打错的风险。第二个原因是防止误操作。最常见的例子是给rm、cp、mv加上交互确认参数alias rmrm -i alias cpcp -i alias mvmv -i在交互式终端里输入rm实际执行的是rm -i删除前需要确认能避免不少手误。这里需要特别注意这个 alias 只对交互式 shell 生效不会影响脚本里的rm行为原因在下一小节说明。1.3 交互式 shell 与非交互式 shell 的关键差异Bash 按启动方式可以分为登录 shell、交互式非登录 shell、非交互式 shell 三类。alias 是否生效很大程度上取决于 shell 是不是交互式的。判断当前 shell 是否交互式可以使用echo $-输出结果中如果包含字符i说明当前是交互式 shell否则是非交互式 shell。也可以检查提示符变量echo $PS1交互式 shell 通常有提示符非交互式 shell 一般没有。alias 的默认策略是只在交互式 shell 中展开。为什么这样设计原因是尽量避免干扰脚本执行。脚本是给机器读的命令应该明确、可预测而交互式终端是给人用的用户需要快捷方式。如果脚本里的ls被意外替换成ls --colorauto或者rm被替换成rm -i脚本的依赖行为可能被改变甚至导致执行结果不符合预期。这一点也是很多为什么我的 alias 在脚本里不生效问题的根源。要记得alias 默认是给人手工敲命令的终端准备的不应该写入自动化脚本。1.4 alias 的边界它不是函数也不能传参alias 的替换能力有限无法处理参数。例如你希望写一个命令创建一个目录并立即进入alias mkcdmkdir -p $1 cd $1这个想法是错的。alias 只是把mkcd /tmp/abc替换成mkdir -p $1 cd $1 /tmp/abc此时$1在展开时不会自动绑定到/tmp/abc而是可能为空。如果你在交互式 shell 里测试第一次可能报mkdir: 缺少操作数即使碰巧成功也不是可靠写法。这类需求应该使用函数mkcd() { mkdir -p $1 cd $1 }所以当需要处理参数、循环、条件判断时应该从 alias 转向函数。alias 擅长的是把长命令缩短函数擅长的是封装一段命令逻辑。别名和函数执行时Bash 的查找顺序可以这样理解先做别名展开再查找函数再查找内置命令最后查找 PATH 下的外部命令。可以通过type命令确认一个名字到底是什么类型。2. 环境准备确认 Bash 版本和配置文件加载顺序2.1 检查当前 shell 和 Bash 版本开始配置 alias 之前先确认环境。打开终端后执行echo $SHELL bash --version echo $BASH_VERSION如果$SHELL输出的是/bin/bash说明当前登录 shell 是 Bash。bash --version会显示版本号例如GNU bash, version 5.1.16。$BASH_VERSION输出的则是当前 Bash 进程的版本字符串。如果$SHELL指向 zsh 或其他 shell这篇文章中的大多数配置仍然可以使用但文件加载路径会有差异。在 Windows 上使用 Git Bash 时Bash 是随 Git 一起安装的。安装完成后在开始菜单打开 Git Bash终端环境与 Linux 上的 Bash 比较接近同样支持本篇文章里的 alias 语法。如果你是在 Git Bash 里敲bash --version通常会看到一个 Git 自带版本的 Bash后续操作没有区别。环境常见配置文件说明Linux~/.bashrc交互式非登录 shell 默认加载macOS~/.bash_profile登录 shell 默认加载可在其中加载~/.bashrcGit Bash~/.bashrc打开程序时加载位置一般是用户主目录2.2 配置文件加载顺序是什么Bash 启动时会根据是否为登录 shell和是否交互式决定读取哪些文件。登录 shell会优先读取/etc/profile然后是用户目录下的~/.bash_profile、~/.bash_login、~/.profile先找到哪个就读哪个。交互式非登录 shell会读取/etc/bash.bashrc和~/.bashrc。平时打开终端窗口时大多数情况属于这一类。非交互式 shell不会自动读取~/.bashrc它读取的是$BASH_ENV指向的文件。如果这个变量没有设置那就什么都不读。这也是为什么很多教程会告诉你在~/.bashrc里加 alias因为日常使用的交互式终端会加载它。在 macOS 上默认终端打开时往往是登录 shell很多人发现~/.bashrc不生效原因就是登录 shell 只读~/.bash_profile。常见的处理方式是在~/.bash_profile里写一行if [ -f ~/.bashrc ]; then source ~/.bashrc fi这样既保留了两类 shell 的分工又能让~/.bashrc中的 alias 和函数在登录时被一起加载。2.3 Ubuntu 等发行版中 .bashrc 的非交互退出机制在 Ubuntu、Debian 等系统里默认~/.bashrc的开头通常包含一段判断case $- in *i*) ;; *) return;; esac这段代码的意思是如果当前 shell 不是交互式 shell就立即返回不再执行后续 alias、函数和提示符配置。这进一步说明了为什么脚本和 systemd 服务中的 Bash 不加载~/.bashrc里的 alias不只是 Bash 不读而是文件自己都提前退出了。理解这层机制后遇到在终端里正常脚本里失效的现象时不用慌张这是 Bash 的默认行为。2.4 用最小环境快速验证 alias 是否可用在学习环境里最快验证 alias 的方法是直接在当前终端里定义一次alias helloecho alias works hello如果控制台输出alias works说明当前 Bash 支持别名展开基本语法正确。再重启一个新终端并输入hello大概率会提示找不到命令因为临时 alias 不会写入配置文件进程退出后就丢了。这个现象正好引出下一节的内容。3. 临时别名一条命令跑通最核心语法3.1 基本语法与第一个临时别名在 Bash 中临时 alias 的定义语法是alias 名称命令内容等号两边不要留空格。名称部分不能包含/因为包含/的名称会被 Bash 当成路径而不是命令。命令内容最好使用单引号包裹尤其是命令里包含特殊字符时。在alias命令中单引号和双引号的行为并不相同。先看一个基础示例alias clsclear cls这里把cls映射成clear执行cls就相当于执行clear。定义临时别名只对当前终端进程有效新开终端后失效。3.2 单引号与双引号的展开差异这一点是很多人踩坑的地方。alias 的定义是在 Bash 执行alias ...命令时读取参数因此引号里的内容会经历正常的变量展开。alias mydirecho $HOME alias mydir2echo $HOME双引号定义时$HOME会被立即展开成/home/user所以mydir实际等于echo /home/user。单引号定义时$HOME被原样保留执行mydir2时才会真正展开$HOME。从使用效果看单引号更符合命令别名的直觉保留定义时的文本执行时再解释。如果你的命令内容里包含$、反引号、转义符等特殊字符建议统一使用单引号。如果确实需要在定义时展开某个变量才使用双引号。3.3 常见临时别名示例在调试过程中可以直接在终端输入这些 aliasalias lls -l alias lals -A alias llls -alF alias grepgrep --colorauto alias ghhistory | grep这些别名只服务于当前会话适合快速验证。例如输入ll能输出详细列表输入gh docker能从历史命令中检索包含docker的命令。如果想确认某个别名当前映射的是什么执行alias ll输出形如llls -alF这可以快速检查配置是否生效。3.4 删除临时别名unalias删除当前 shell 中的一个别名unalias ll删除当前 shell 中的所有别名unalias -a注意unalias -a会把当前 shell 的所有 alias 清空影响范围很大只适合在干净的调试环境中使用。如果 aliases 是保存在~/.bashrc里的删除当前会话的 alias 后新开终端仍然会重新加载。还需要知道一点alias 删除后原本命令会恢复为真实命令。比如你之前定义了alias lsls --colorauto执行unalias ls后ls就恢复成系统默认的ls不再强制加颜色。4. 永久别名把配置写入正确文件4.1 写入 ~/.bashrc 是最常用的方式要把 alias 永久生效最简单的方式是把定义写入~/.bashrc。使用 vim 或 nano 编辑nano ~/.bashrc在文件末尾追加一组 aliasesalias llls -alF alias lals -A alias lls -CF alias gsgit status alias gpgit pull --rebase alias gcgit checkout alias grepgrep --colorauto保存退出后执行source ~/.bashrc或者简写为. ~/.bashrc这样当前终端立即生效。新终端打开时也会自动加载。这里要强调source ~/.bashrc只让当前终端读到新配置不会同步到其他已经打开的终端。如果你开了多个终端需要在每个终端里执行source ~/.bashrc或者直接关闭重开。4.2 分文件管理~/.bash_aliases当 alias 越来越多全堆在~/.bashrc里会让文件变得混乱。更推荐的方式是单独建一个~/.bash_aliases文件然后让~/.bashrc在存在该文件时加载它。在~/.bashrc中加入if [ -f ~/.bash_aliases ]; then source ~/.bash_aliases fi然后在~/.bash_aliases中写alias llls -alF alias gsgit status alias gpgit pull --rebase这样做的好处是~/.bashrc保持干净alias 集中在一个文件里后续做多机同步或版本管理时只需要拷贝一个文件。需要避免的是在~/.bashrc和~/.bash_aliases中重复定义同一个别名因为你可能无法立刻判断最终生效的是哪一个。按经验后加载的定义会覆盖先加载的定义但与其依赖这个顺序不如统一放一处。4.3 用 check 检查配置是否生效配置永久别名后不要只靠肉眼判断。用这组命令确认alias ll type llalias ll输出映射内容type ll输出类似ll is aliased to ls -alF如果新开终端后输入ll报command not found先检查配置文件路径是否正确再看是否因为登录 shell 和交互式 shell 加载顺序差异导致~/.bashrc没有被加载。4.4 防止重复加载的小技巧如果你在~/.bash_profile中手动source ~/.bashrc而~/.bashrc又再次 source~/.bash_aliases一般情况下没有问题因为同一个 alias 重复定义不会报错后定义覆盖前定义。但如果将来在配置里追加了环境变量、PATH 拼接或函数导出重复加载可能导致重复追加。判断某个操作是否已经定义可以使用if [ ! -x $(command -v xxx) ]; then echo xxx not found fi不过对于 alias 来说更实用的做法是保持单一加载入口不要在多个文件里到处追加 alias。如果使用~/.bash_aliases就只维护它一个文件。4.5 Git Bash 与 Windows 环境的差异在 Git Bash 中~/.bashrc的路径通常是C:\Users\你的用户名\.bashrc但文件内容与 Linux 完全一致。编辑时可以使用notepad ~/.bashrc或者vi ~/.bashrcGit Bash 默认启动时也会读取用户主目录下的配置文件所以把 alias 放在~/.bashrc中即可。如果在 Git Bash 中遇到与系统服务相关的问题例如启动 ssh-agent 时出现错误 1058这通常不是 alias 配置问题而是 Windows 服务未启动或未启用。此时需要用管理员权限的终端执行sc config ssh-agent start auto sc start ssh-agent这个错误属于 Windows 服务层面的管理与 Bash alias 无关但很多人会在同时配置 Git Bash 环境时遇到容易混淆排查方向。5. 进阶用法函数式别名与带参数场景5.1 alias 不能按参数处理函数可以前文提到alias无法真正处理参数。当命令逻辑需要把参数传入中间位置时函数是更合适的做法。函数的基本格式函数名() { 命令体 }定义一个mkcd函数mkcd() { mkdir -p $1 cd $1 }执行mkcd /tmp/demo如果目录不存在先创建再进入如果目录已存在直接进入。这里的关键是使用双引号包住$1避免目录名含空格时被拆成多个参数。5.2 将函数导出到子 shell在交互式 shell 中定义的函数只在当前 shell 可用。如果你在脚本中调用bash -c mkcd /tmp/demo子 shell 无法识别这个函数。此时可以导出函数export -f mkcd之后启动的子 bash 进程就能看到这个函数。不过要注意export -f依赖 Bash 的函数导出机制在非 Bash 环境中不一定有效。在脚本中如果需要复用函数更稳妥的方式是单独维护一个函数文件在脚本中显式 sourcesource ~/.bash_functions mkcd /tmp/demo这种方式比依赖export -f更可控。5.3 常用函数式别名示例下面几个函数是实际项目中比较常用的# 创建目录并进入 mkcd() { mkdir -p $1 cd $1 } # 快速查找文件忽略 .git 目录 findf() { find . -name $1 -not -path ./.git/* 2/dev/null } # 查看端口占用进程 port() { lsof -i :$1 2/dev/null || ss -ltnp | grep :$1 }把函数和 alias 配合起来可以让终端操作更顺手。例如alias fnmkcd不过一般情况下没必要这样做直接使用函数名即可。5.4 alias 和函数混用时的优先级当 alies 名称与函数名相同时Bash 会优先执行 alias。这是因为 alias 展开发生在命令解析阶段先于函数查找。例如demo() { echo function; } alias demoecho alias demo输出是alias。如果希望临时绕过 alias直接使用函数或原始命令可以\demo command demo\demo会阻止别名展开command demo会跳过函数和 alias 查找直接找内置命令或 PATH 下的程序。实际项目中要避免这种同名冲突维护命令时统一命名规则能减少很多困惑。6. 查看、判断和清理别名6.1 用 alias 命令查看全部别名当前 shell 中所有的 alias 可以通过输入alias查看alias输出类似alias llls -alF alias lsls --colorauto如果只想确认某一个别名可以带参数alias ll输出llls -alF。如果该名称不是 alias则会报错提示找不到。6.2 type 命令判断名称类型type命令可以判断一个名称到底是 alias、函数、内置命令还是外部命令type ll type cd type git type -a ls输出示例ll is aliased to ls -alF cd is a shell builtin git is /usr/bin/git ls is aliased to ls --colorautotype -a会列出所有匹配项包括 alias、函数、内置命令和 PATH 下的可执行文件。当一个名称同时存在 alias 和外部命令时它能清楚展示查找顺序。which命令只能找到 PATH 中的可执行文件所以往往查不到 alias。很多人用which ll发现没有输出就误以为别名配置失效实际上应该用alias ll或type ll判断。6.3 为什么新打开的终端不生效最常见的问题是在终端里定义了 alias 或改完~/.bashrc新开终端后仍然不生效。原因通常有两个第一alias 写入的不是~/.bashrc而是写到了/etc/bashrc或~/.bash_profile而当前终端类型没有加载对应文件。第二写入~/.bashrc后没有重新加载新终端确实会加载但如果当前 shell 是登录 shell则需要确认是否在~/.bash_profile中主动加载了~/.bashrc。检查顺序grep -n alias ~/.bashrc grep -n bashrc ~/.bash_profile 2/dev/null echo $-如果$-包含i说明当前是交互式 shell正常情况下会加载~/.bashrc如果不包含i说明当前 shell 不是交互式 shell自然不会加载。6.4 完整重置别名如果调试时 alias 配置混乱想要恢复干净环境可以执行unalias -a这会清空当前 shell 的所有别名然后你再手动 source 需要的配置文件source ~/.bashrc这样可以模拟一个全新终端的状态。要注意这一步同样只影响当前 shell不会破坏配置文件本身。7. 常见坑和实战排查路径7.1 修改了 ~/.bashrc 但当前终端不生效现象编辑保存~/.bashrc后继续在当前终端输入新 alias 名称提示command not found。原因~/.bashrc是在 shell 启动时加载的编辑文件不会实时广播到已运行的 shell。排查与解决source ~/.bashrc然后验证alias ll如果仍然不生效检查文件是否存在语法错误bash -n ~/.bashrcbash -n只做语法检查不执行文件适合确认配置里有没有多写引号、括号、fi缺失等问题。如果输出为空说明语法正常。7.2 脚本里 alias 不生效不是配置错了现象在终端定义一个 alias写进脚本后执行脚本里却提示找不到该命令。原因脚本运行在非交互式 shell 中默认不进行 alias 展开也不加载~/.bashrc。验证方式#!/bin/bash alias helloecho hello hello直接运行这个脚本默认会报hello: command not found。如果确实想临时开启 alias 展开可以在脚本里显式设置#!/bin/bash shopt -s expand_aliases alias helloecho hello hello这样脚本能执行成功但并不推荐在自动化脚本里依赖 alias。脚本应当使用全量命令或者用函数封装逻辑避免依赖某个终端方向的别名配置。7.3 双引号导致别名定义时变量被提前展开现象定义了alias todayecho $(date)结果每天执行today显示的都是定义那天的日期。原因双引号中的$(date)在 alias 命令执行的那一刻就被展开成具体日期alias 保存的是展开后的文本。正确处理方式alias todayecho $(date)或者today() { echo $(date) }这类问题在配置里不容易被发现因为定义时输出正常过几天才发现不对。排查时可以执行alias today看保存的内容里是否有已经展开的文本。7.4 alias 与命令同名导致误判现象配置了alias lsls --colorauto在脚本中执行ls发现输出格式和终端不一样。原因脚本默认不展开 alias所以脚本里的ls是原始ls没有--colorauto。这其实不是 bug而是 Bash 默认的保护机制。如果你希望查看一条命令是否被 alias 覆盖type ls type -a ls如果看到ls is aliased to ...说明当前交互式环境中 ls 被别名覆盖。在生产脚本中建议始终使用完整参数或者使用command ls来绕过 alias。7.5 systemd service 文件里 alias 不生效的实战排查一个很典型的线上问题在终端里用 bash 执行脚本可以正常拉起喇叭但把启动命令写进 systemd service 文件后无法正常工作。现象脚本里调用了 shell alias 或依赖了当前用户的环境配置systemd 启动时报错日志里看不到预期输出。原因拆解systemd 的ExecStart直接执行指定命令或脚本它会创建一个干净的、最小化的执行环境不会继承交互式用户的 alias。即使ExecStart写的是/bin/bash -c ll这也是非交互式 shell不会加载~/.bashrc默认 alias 不展开。systemd 服务运行时的 PATH 可能被精简/usr/local/bin下的命令不一定能找到。排查步骤journalctl -u your-service -n 50查看日志中是否出现command not found或路径错误。然后在脚本中加入调试信息set -x type ll which ll echo $PATH如果type ll提示 not found说明 alias 没有加载如果which ll找不到命令说明 PATH 不完整。修复方式在脚本中使用完整路径例如/usr/bin/pkill、/bin/echo。不要在 service 或脚本中依赖 alias。如果必须用到某个命令的完整环境可以使用bash -lc 命令强制加载登录 shell但生产环境不推荐这样做因为登录 shell 加载了大量本不必要的配置会让服务启动环境变得不可预测。一个更好的做法是把需要复用的一小段逻辑封装成独立脚本在 service 中直接调用脚本。例如#!/bin/bash /usr/bin/pkill -f demo-service || true /bin/echo service starting /var/log/demo.log /usr/local/bin/demo-server --config /etc/demo/config.yaml然后在 service 文件中写[Unit] DescriptionDemo Service [Service] Typesimple ExecStart/usr/local/bin/demo-start.sh Restarton-failure [Install] WantedBymulti-user.target这样既不依赖 alias也不依赖用户环境日志和重启策略都由 systemd 管理。7.6 容易混淆的非 Bash 报错GRUB 提示和 Windows ssh-agent 服务排查过程中有一些报错会让人误以为是 Bash alias 配置问题实际和 alias 无关。第一种是系统启动时看到Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions.这是 GRUB 引导程序进入了命令行救援模式不是 Bash 的 shell 环境。此时应该输入exit返回菜单或者检查 GRUB 配置和系统引导项而不是去~/.bashrc里找问题。第二种是在 Git Bash 中配置 ssh-agent 时遇到unable to start ssh-agent service, error :1058这个错误表示 Windows 的 ssh-agent 服务未启用或未启动需要使用管理员权限执行sc config ssh-agent start auto sc start ssh-agent之后再回到 Git Bash 中运行ssh-add。这与 Bash alias 无关但常常出现在同一套终端环境配置流程里容易让人误以为是自己写的 alias 语法有问题。8. 最佳实践维护一套可迁移的 Bash Alias 配置8.1 命名规范alias 的名称不要随便取。建议遵循几条规则短但可读。gs、gp、gco容易理解x、q这种含义不明的名字几天后自己也会忘记。不要覆盖系统的关键命令除非你明确知道后果。覆盖ls、grep可以接受覆盖cd要非常谨慎覆盖history则容易造成困惑。同名冲突要避免。尤其在多台机器同步配置时不同系统上同一个命令的默认行为可能不同。8.2 分组与注释在~/.bash_aliases中按场景分组并写上简单注释# 基础命令 alias llls -alF alias lals -A # Git 操作 alias gsgit status alias gpgit pull --rebase alias gcogit checkout # 防误操作 alias rmrm -i alias cpcp -i alias mvmv -i注释不是多余而是帮助半年后的自己快速定位。同时不要在一个文件里维护几千行内容alias 超过一定数量后建议拆分成多个文件例如~/.bash_aliases通用命令。~/.bash_aliases_gitGit 相关。~/.bash_aliases_dockerDocker 相关。然后在~/.bashrc中统一加载for f in ~/.bash_aliases*; do [ -f $f ] source $f done这个方案适合个人开发环境生产服务器不建议引入复杂的通配加载逻辑。8.3 不要把 alias 当成万能方案alias 适合的是交互式终端里的高频短命令。以下场景不要使用 alias自动化运维脚本应该写完整命令或函数。需要传递参数的复杂逻辑使用 Bash 函数。需要同时兼容多个 shell如 zsh、fishalias 语法不通用应该使用各 shell 自己的配置方式或者改用可执行脚本。一个简单的判断标准如果一段命令逻辑不只是替换名称还需要判断参数、处理返回值、做循环那就应该写成函数而不是强行用 alias 拼接。8.4 多机同步与版本管理个人开发机的 alias 配置可以用 Git 管理。维护一个 dotfiles 仓库目录结构示例dotfiles/ .bashrc .bash_aliases .gitconfig install.shinstall.sh只做一件事把仓库里的文件软链到用户主目录。例如ln -sf ~/dotfiles/.bashrc ~/.bashrc ln -sf ~/dotfiles/.bash_aliases ~/.bash_aliases同步到新机器后执行一次source ~/.bashrc就可以使用同一套 alias。注意不要直接把整个~目录放进 Git容易把密钥、日志和其他隐私内容提交进去。8.5 扩展方向alias 只是终端效率优化的起点。后续值得继续深入的方向有Bash 补全使用complete命令或 bash-completion 扩展让自定义命令支持 Tab 补全。提示符定制通过PS1显示当前目录、Git 分支、上一条命令执行时间。环境管理用direnv按目录加载环境变量避免把不同项目的环境变量混在一起。脚本编写规范当你发现一个函数越来越长时考虑把它独立成脚本放到~/bin并加入 PATH。多 shell 管理如果逐渐转向 zsh可以学习 zsh 的 alias 语法和oh-my-zsh中的别名插件把相同的命令习惯迁移过去。Bash Aliases 用起来不难难的是理解它的边界什么时候该用 alias什么时候该用函数什么时候该重新设计一个脚本。把这几个边界理清楚你的终端配置才不会越堆越乱。对新用户来说最好的练习方式不是一次性抄一百个别名而是从 5 到 10 个高频命令开始用一个月时间持续调整最终沉淀出一套真正适合自己工作习惯的配置。
返回列表