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

父Shell执行命令后,如何在子Shell中执行指定命令并正常退出?

解决子Shell中命令执行与退出的问题

我来帮你搞定这个问题!你遇到的核心问题是:bef useTable 会启动一个交互式子Shell,直接用 && 串联命令的话,exit 并不会在这个子Shell里执行,而是要等 bef useTable 退出后才会跑——但交互式子Shell不手动退出的话,这个 exit 根本没机会执行。

下面给你两种可行的方案,都能完美实现你的需求:

方案1:用管道传递命令给子Shell

把需要在子Shell中执行的命令(包括exit)通过管道输入给bef useTable启动的子Shell:

# 先在父Shell执行创建表命令
bef createTable xyz
# 通过管道将命令传入子Shell执行
echo -e "bef refreshTable -latest\nexit" | bef useTable xyz

echo -e 用来解析换行符,让两个命令依次执行:先刷新表,再退出子Shell。

方案2:用Here-Doc传递命令(更易读)

如果后续需要添加更多子Shell命令,Here-Doc的写法会更清晰,可读性更强:

bef createTable xyz
# 用Here-Doc把命令传给子Shell
bef useTable xyz << EOF
bef refreshTable -latest
exit
EOF

这里的EOF是自定义分界符(你也可以换成其他任意字符串,只要首尾一致就行),分界符之间的内容会作为标准输入传给bef useTable启动的子Shell,按顺序执行里面的命令。

为什么你之前的写法不行?

你用 /bin/bash -c 'bef useTable mrinal_bugs && exit' 时,bef useTable 是在 /bin/bash -c 启动的Shell里运行的,它会创建一个新的交互式子Shell并接管终端。这时候后面的 exit 属于外层的 /bin/bash -c Shell,要等 bef useTable 退出后才会执行——但交互式子Shell不主动退出的话,这个 exit 永远不会被触发。

内容的提问来源于stack exchange,提问作者Mrinal Bhattacharjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:52