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

从脚本调用run_sw时如何保留其实际所在目录路径

解决方法

问题根源是用source(.命令)调用run_sw时,$0指向的是当前shell进程名(或你的my_script路径),而非run_sw本身,导致ls -l $0拿不到run_sw的正确信息,最终DIR计算错误。

给你几个不用修改run_sw的解决办法:

方案1:定位绝对路径后切换目录再source

先找到run_sw的绝对路径,切换到它所在的目录再执行source,这样run_sw里的路径计算逻辑就能正常工作:

# 获取run_sw的绝对路径
RUN_SW_ABS=$(realpath run_sw)
# 切换到该脚本所在目录
cd "$(dirname "$RUN_SW_ABS")"
# 执行source
. "$RUN_SW_ABS"
# 如果需要回到原来的工作目录,可以先保存原路径
# ORIG_PWD=$(pwd)
# cd "$(dirname "$RUN_SW_ABS")"
# . "$RUN_SW_ABS"
# cd "$ORIG_PWD"

方案2:直接用绝对路径执行脚本(无需source场景)

如果run_sw不需要修改当前shell的环境变量,只是启动程序,直接用绝对路径执行就行:

RUN_SW_ABS=$(realpath run_sw)
"$RUN_SW_ABS"

方案3:强制指定$0的值(必须source的场景)

如果必须用source且不想切换目录,可以通过bash的参数强制让$0指向run_sw的绝对路径:

RUN_SW_ABS=$(realpath run_sw)
bash -c '. "$0"' "$RUN_SW_ABS"

这样run_sw里的$0就会是它自己的路径,ls -l $0能正确获取到脚本信息,DIR变量就和直接在终端运行时一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:25