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

为何在当前目录运行Bash脚本时,命令执行在主目录?

问题原因与解决方法

你的问题核心是脚本执行时的工作目录被意外切换到主目录,结合你给出的脚本和现象,主要有以下几种可能及对应解法:

1. 脚本语法错误导致意外跳转目录

你尝试的部分脚本存在bash语法错误,触发了默认跳转主目录的行为:

  • 第三个脚本variable = $PWD:bash变量赋值时=前后不能有空格,这会导致命令执行失败,后续cd $variable中$variable为空,cd不带参数默认跳转主目录;
  • 第四个脚本variable= pwd``:=后有空格会让bash把variable=当成无效命令,pwd单独执行后$variable依然为空,同样触发cd跳转主目录。

解法:

  • 修复脚本语法:变量赋值的正确写法是variable=$PWD或variable=$(pwd);
  • 若无需切换目录,直接执行touch test.txt即可,子shell会继承你运行脚本时的当前工作目录。

2. 脚本运行方式错误

如果你用source script.sh或. script.sh执行脚本,脚本会在当前zsh环境中运行(而非子shell),此时脚本中的错误会直接改变当前shell的工作目录。

解法:

  • 用子shell执行脚本:在当前目录下运行./script.sh(先给脚本加可执行权限:chmod +x script.sh);
  • 若必须用source执行,先排查并修复脚本中的所有语法错误。

3. 执行路径导致工作目录异常

如果你用绝对路径运行脚本(比如bash ~/script.sh),且脚本未指定工作目录,会默认基于脚本所在目录执行操作,而非你当前所在的目录。

解法:

  • 若要在你运行脚本的当前目录执行操作,无需添加cd命令,直接写目标命令即可;
  • 若要固定在脚本所在目录执行操作,可在脚本开头添加:
    #!/bin/bash
    cd "$(dirname "$0")" || exit 1
    touch test.txt
    
    这段代码会自动切换到脚本所在目录,再执行后续命令。

快速验证方法

在脚本开头添加一行打印当前工作目录的代码,就能明确脚本实际运行的目录:

#!/bin/bash
echo "脚本当前工作目录: $PWD"
touch test.txt

运行后查看输出,再针对性调整脚本或执行方式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:31:05