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

Linux bash脚本中用变量执行cd命令无法切换目录如何解决?

问题原因

你遇到的cd不生效是Linux Shell的通用机制,和你用变量传路径没有本质关联:

  • 直接执行./你的脚本名称.sh时,系统会启动一个独立的子Shell进程运行脚本内容
  • 脚本里的cd命令只会修改这个子Shell的当前工作目录,脚本执行结束后子进程销毁,你当前操作的父Shell环境完全不受影响
  • 额外注意你的代码中cd $wrk没有加引号,如果路径包含空格、特殊字符也会导致执行失败,建议统一改成cd "$wrk"的写法
可用解决方案

场景1:需要脚本执行完后,你当前操作的终端窗口目录切换到目标路径

使用source或者.命令执行脚本,让脚本内容直接在当前Shell进程中运行,不会启动独立子进程:

source ./你的脚本名称.sh
# 简写写法
. ./你的脚本名称.sh

场景2:只需要脚本后续的命令都在目标路径下执行,不需要影响当前操作的终端目录

无需修改执行方式,只要在cd命令后加校验逻辑,确认切换成功再执行后续操作即可,调整后的代码参考:

#!/bin/bash
current=$(pm2 l | grep online | grep 7701 | awk ' { print $2 } ')
echo $current
stop=$(pm2 l | grep stopped | grep 7701 | awk ' { print $2 } ')
echo $stop
wrk=$(pm2 show $stop | grep  cwd | awk ' { print $5 } ' )
pwd
export wrk="$(pm2 show $stop | grep  cwd | awk ' { print $5 } ' )"
echo $wrk
# 加引号避免路径含特殊字符报错,加判断提前感知切换失败问题
if cd "$wrk"; then
    echo "成功切换到目录:$wrk"
    # 后续需要在该目录下执行的命令都写在这个分支里即可
else
    echo "切换目录失败,请检查路径$wrk是否存在、权限是否正常"
    exit 1
fi

调整后脚本内cd之后的所有命令都会在$wrk对应的路径下正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:04