You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash中执行多条命令且不生成子shell的方法

更优的单条命令实现方式

这是shell脚本里很容易踩的小坑,我给你几个优雅的解决方案,既能避免子shell导致的目录问题,又不会重复执行cd:

方案1:用mkdir -p简化逻辑(推荐)

mkdir -p的特性是如果目录已存在,不会报错且返回成功,所以可以直接写成:

mkdir -p folder && cd folder && git clone https://github.com/user/my-project.git

不管目标目录是否存在,这条命令都会:

  1. 确保folder目录存在(不存在就创建,存在就跳过)
  2. 进入该目录(只执行一次cd)
  3. 执行git clone

这个方案最简洁,逻辑清晰,几乎没有冗余操作,是日常场景里的首选。

方案2:用大括号{}代替子shell()

如果你想保留类似最初的||分支逻辑,只需要把生成子shell的()换成不会创建子shell的{}(注意shell语法要求:大括号前后要有空格,结尾要加分号):

cd folder &>/dev/null || { mkdir folder && cd folder; } && git clone https://github.com/user/my-project.git

这样修改后,cd的效果会保留在当前shell中,后续的git clone就能在正确的目录执行,而且不管目录是否存在,cd都只会执行一次:

  • 目录存在:cd成功,跳过||分支,直接执行clone
  • 目录不存在:进入||分支,创建目录并cd,再执行clone

方案3:用if结构提升可读性

如果更看重代码可读性,也可以用if...else结构,逻辑一目了然:

if cd folder &>/dev/null; then
    git clone https://github.com/user/my-project.git
else
    mkdir folder && cd folder && git clone https://github.com/user/my-project.git
fi

这个方案虽然不是单行,但逻辑最清晰,适合需要后续扩展复杂逻辑的场景。

内容的提问来源于stack exchange,提问作者Rodrigo Kondo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:08:36