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

Linux Shell使用while循环读取文件时报command not found错误

问题根源

你当前的写法错误地将纯文本文件fulllist.txt作为可执行程序调用:
Shell 中管道符|的作用是将左侧命令的标准输出传递给右侧命令,你在管道左侧直接填写了文本文件的路径,触发了Shell的执行逻辑,系统会尝试把这个txt文件当成脚本运行,自然会把文件内的内容TEST识别为待执行的指令,由此产生你遇到的报错。

正确解决方案

优先推荐使用输入重定向的写法,该写法不会额外创建子shell,循环内部修改的变量可以在循环结束后被外部正常调用:

#!/bin/bash
while IFS= read -r sub ; do
  # 此处编写你需要对变量$sub执行的处理逻辑
done < /path.../fulllist.txt

如果你确实需要使用管道写法,需要先通过cat命令读取文件内容作为管道的输入:

#!/bin/bash
cat /path.../fulllist.txt | while IFS= read -r sub ; do
  # 此处编写你需要对变量$sub执行的处理逻辑
done

注意:管道写法会为while循环创建独立的子shell,循环内部定义、修改的变量无法在循环结束后被外部代码访问,仅在无跨循环变量传递需求时使用。

额外注意事项

  • 如果文件路径包含空格、特殊字符,建议用双引号包裹路径,避免解析错误,示例:< "/home/user/my files/fulllist.txt"
  • 如果需要过滤文件中的空行,可以在读取前追加过滤逻辑,比如grep -v '^$' /path.../fulllist.txt | while ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:51:00