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

Windows下Git Bash执行Shell脚本遇命令未找到及文件读取问题

Git Bash脚本问题解决:__git_ps1命令未找到+文件读取失败

1. 解决__git_ps1: command not found错误

该错误源于Git Bash的提示符配置调用了__git_ps1函数,但该函数默认未加载。你已通过下载git-prompt.sh解决了当前会话的问题,为永久生效,可将脚本加载命令添加到bash配置文件:

  • 打开Git Bash,编辑~/.bashrc(不存在则创建)
  • 添加一行:source ~/.bash_git
  • 执行source ~/.bashrc使配置立即生效

2. 解决脚本无法读取文件内容的问题

脚本检测到文件存在但无Dealer输出,以下是常见原因及修复方案:

问题:单行逗号分隔内容与按行读取逻辑不匹配

你的文件是单行逗号分隔格式(如0001,0002,0003),但原脚本的while IFS=',' read -r dealer是按行读取,而非按逗号分割字段。若文件最后一行无换行符,read会返回非零状态,直接跳过循环体。

修复脚本逻辑:先读取整行,再按逗号分割字段:

#!/bin/bash

if [ -f "data/dealers.txt" ]; then
    echo "File exists. Attempting to read..."
    
    # 读取每行内容,再分割为单个经销商ID
    while IFS= read -r line; do
        IFS=',' read -ra dealer_list <<< "$line"
        for dealer in "${dealer_list[@]}"; do
            # 去除前后空格
            dealer=$(echo "$dealer" | xargs)
            echo "Dealer: $dealer"
        done
    done < data/dealers.txt
else
    echo "File does not exist or cannot be accessed."
fi

问题:相对路径指向错误

若data/dealers.txt是相对于脚本所在目录(而非执行脚本的当前目录),会导致读取异常。可修改脚本使用基于脚本位置的绝对路径:

#!/bin/bash
# 获取脚本所在目录的绝对路径
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
# 假设data目录在脚本目录的上级目录,可根据实际调整路径
DATA_FILE="$SCRIPT_DIR/../data/dealers.txt"

if [ -f "$DATA_FILE" ]; then
    echo "File exists. Attempting to read..."
    # 插入上述分割字段的循环逻辑
else
    echo "File does not exist or cannot be accessed."
fi

问题:用sh执行bash脚本

脚本开头指定了#!/bin/bash,但sh可能不是bash(Git Bash中部分环境sh指向dash),导致bash特性失效。改用bash执行:

bash scripts/Test.sh

问题:文件无换行符导致循环不执行

若文件最后一行无换行符,read读取内容后返回非零状态,循环体不执行。修改循环条件确保非空内容被处理:

while IFS=',' read -r dealer || [ -n "$dealer" ]; do
    dealer=$(echo "$dealer" | xargs)
    echo "Dealer: $dealer"
done < data/dealers.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:20:21