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

从ksh脚本调用ksh导致调用方脚本执行终止

原因与解决办法

原因

你用.(点命令)调用被调用脚本时,是在当前shell进程中执行该脚本的所有代码,而非启动新进程。当被调用脚本执行ksh命令时,这个命令会启动一个新的交互式ksh shell,直接接管当前进程的控制权——也就是调用方脚本所在的进程会被这个交互式shell占用,所以echo "DONE!"会被卡住,直到你退出这个交互式shell(输入exit)才会继续执行。

而直接执行calledcalled时,是启动独立的子进程来运行命令,子进程里的ksh只会占用子进程,不会影响父进程的调用方脚本,所以父进程能正常执行后续命令。

解决办法

既然被调用脚本无法修改,你需要改变调用它的方式:放弃点命令,改用子进程执行的方式,示例如下:

#!/bin/ksh
# Caller Script

# 用ksh启动子进程执行被调用脚本
ksh ~/called
echo "DONE!" 

这样被调用脚本里的ksh只会在子进程中启动交互式shell,父进程(调用方脚本)会等待子进程结束(你退出交互式shell后),然后继续执行后续命令。

如果不需要等待这个交互式shell,也可以把它放到后台运行:

#!/bin/ksh
# Caller Script

ksh ~/called &
echo "DONE!" 

内容的提问来源于stack exchange,提问作者User 10482

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15