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

Windows下Git Bash脚本无法读取部分文本文件求助

问题分析与解决

核心问题是脚本执行第一个while循环时切换了目录,但未切回原工作目录:

  • 第一个循环里的cd C:\\FolderName\\...会将当前工作目录切换到指定的Windows路径
  • 第二个循环尝试读取file2.txt时,是在这个新目录下查找,而file2.txt实际在脚本最初的工作目录里,因此报“no such file or directory”

解决方案

有两种简单的修复方式:

方式1:用子shell隔离目录切换

将循环内的代码用括号包裹,子shell中的cd操作不会影响主脚本的当前目录:

#!/bin/bash  
cwd=$(pwd)  
echo "$cwd"  

while read x;  
do    
    (
        # Git Bash中推荐用/c/替代C:\\的写法
        cd "/c/FolderName/FolderName/FolderName/FolderName"
        git clone "git@bitbucket.org:companyname/$x"  
        echo "git clone git@bitbucket.org:companyname/$x"
    )
done < file1.txt  


echo "$cwd"  

while read x;  
do  
    (
        cd "/c/FolderName/FolderName/FolderName/FolderName"
        git clone "git@bitbucket.org:companyname/$x"  
        echo "git clone git@bitbucket.org:companyname/$x"
    )
done < file2.txt

方式2:切换目录后切回原目录,或使用文件绝对路径

每次cd后手动切回原工作目录,或者直接用绝对路径读取文本文件:

#!/bin/bash  
cwd=$(pwd)  
echo "$cwd"  

while read x;  
do    
    cd "/c/FolderName/FolderName/FolderName/FolderName"
    git clone "git@bitbucket.org:companyname/$x"  
    echo "git clone git@bitbucket.org:companyname/$x"
    # 切回脚本最初的工作目录
    cd "$cwd"
done < "$cwd/file1.txt"  


echo "$cwd"  

while read x;  
do  
    cd "/c/FolderName/FolderName/FolderName/FolderName"
    git clone "git@bitbucket.org:companyname/$x"  
    echo "git clone git@bitbucket.org:companyname/$x"
    cd "$cwd"
done < "$cwd/file2.txt"

关于文件权限的说明

你尝试修改.txt文件权限的操作完全没必要:

  • 文本文件只需要读权限即可被脚本读取,你的ls -l输出显示所有.txt文件都有-rw-r--r--权限,已经满足读取要求
  • chmod +x是给可执行文件添加执行权限,对普通文本文件无效;且Windows文件系统在Git Bash中的权限映射有特殊性,修改普通文本文件的执行权限不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:58:10