You need to enable JavaScript to run this app. Bash读取输入文件带\r回车符导致cd报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Bash读取输入文件带\r回车符导致cd报错如何解决?

Bash读取Windows格式文本行末尾携带\r的解决方案

报错根因:project-list.txt为Windows格式文本文件,换行符为\r\n(CRLF),而Bash默认适配Unix格式的\n(LF)换行符,因此读取行内容时会将末尾的\r保留,最终导致拼接后的路径非法。

可用解决方法

  • 方法1:读取内容时实时移除回车符
    修改mapfile读取逻辑,通过tr提前过滤所有\r字符:
    mapfile -t arr < <(tr -d '\r' < project-list.txt)
    
    也可以在使用变量时单独处理后缀:
    for i in "${arr[@]}"; do
       # 移除变量末尾的\r字符
       i=${i%$'\r'}
       cd "$parent_folder/$i"
    done
    
  • 方法2:直接转换源文件为Unix格式
    一次修改永久生效,无需调整脚本逻辑:
    1. 若系统安装有dos2unix工具,直接执行转换命令:
      dos2unix project-list.txt
      
    2. 无dos2unix时可通过sed替换行尾回车符:
      sed -i 's/\r$//' project-list.txt
      
  • 方法3:调整读取逻辑适配CRLF换行
    自定义行分隔符,读取时自动过滤末尾\r:
    arr=()
    while IFS=$'\n\r' read -r line || [[ -n $line ]]; do
      arr+=("$line")
    done < project-list.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:36:09