Mac终端命令串联有五种方式:分号(;)顺序执行,不检查成败;双与(&&)前序成功才执行后续;管道(|)传递stdout作下个命令输入;花括号{}将多命令归为逻辑单元并统一重定向;test等判断语句可增强容错。

在Mac终端中,想让一条命令串起多个操作,比如先切换目录再列出文件最后返回上一级,又不想反复敲回车或开多个窗口,就得掌握命令串联的底层逻辑和实际写法。
用分号 ; 顺序执行,不关心成败
输入命令后加英文分号,再跟下一条命令,以此类推。每条命令都会运行,不管前一条是否成功。
cd ~/Downloads ; ls -l ; cd -
这三步会依次执行:先进入下载目录→列出详细文件信息→退回到上一个目录。即使中间某步报错(比如ls目标不存在),后续命令仍会继续运行。适合做清理、探路、状态快照这类“尽力而为”的任务。
用双与 && 确保前序成功才执行下一步
只有当前面的命令退出状态码为0(即成功)时,后面的命令才会运行。一旦某步失败,整条链立刻终止。
方法一:基础链式写法
mkdir project && cd project && touch README.md
这行命令会创建目录→进入该目录→新建README文件。如果project已存在,mkdir失败,后面两步就不会执行,避免误操作进入错误路径或覆盖文件。
方法二:嵌套判断增强容错
test -d myapp || mkdir myapp && cd myapp && git init
【test -d myapp】先检查目录是否存在;若不存在(返回非0),则执行mkdir;无论哪种情况,只要最终myapp目录存在,就cd进去并初始化git。这种组合比单纯用&&更稳健,防止因目录缺失导致流程中断。
用管道 | 把前一个命令的输出当后一个的输入
这是真正意义上的“数据流串联”,不是简单执行顺序。前命令的标准输出(stdout)直接变成后命令的标准输入(stdin)。
ps aux | grep "chrome" | wc -l
先列出所有进程→筛选含chrome的行→统计行数。三个命令共享同一行输入输出流,中间不落地、不缓存,效率高且内存占用低。注意:管道只传递stdout,stderr(如报错信息)默认仍输出到终端,不会进管道。
如果想把错误也一起过滤,得先重定向:ps aux 2>&1 | grep "chrome" | wc -l
用花括号 {} 将多条命令归为一个逻辑单元
第一步:用花括号包裹命令组,各命令间用分号隔开
{ cd /tmp; pwd; ls | head -3; } > /tmp/session.log 2>&1
第二步:整个花括号块被视为单个命令,可统一重定向输出和错误
第三步:注意花括号前后必须有空格,否则shell会报错:{cd /tmp;} 是错的,{ cd /tmp; } 才对
这种方法适合需要集中记录日志、批量调试环境变量或封装临时上下文的操作。它不创建子shell(不像小括号()),所以cd等改变当前环境的命令在括号外依然生效——但花括号内cd的效果仅限于该组内部,执行完回到原目录。

















