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
相关产品推荐
相关产品推荐

