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

如何在bash脚本中用cat命令将用户输入保存到指定文本文件

问题原因说明
  • read 命令的核心作用是将标准输入的内容存入指定变量,默认不会将输入内容输出到标准输出,因此管道右侧的 cat 命令无法接收到任何输入流,最终生成的文件为空。
  • Bash 中管道连接的所有命令都会在独立的子 Shell 中执行,你通过 read name 读取到的内容仅存在于管道左侧的子 Shell 环境中,父 Shell 无法获取该 name 变量的值,后续的 if 判断逻辑也会失效。
  • 你的代码存在语法错误:[[ $name==Bob ]] 缺少判断符两边的空格,且 if 判断后缺少 then 关键字,运行时会触发语法报错。
修正方案

方案1:无管道的最简实现(日常使用优先)

如果后续需要用到读取到的 name 变量,直接读取后输出重定向到文件即可,无需使用管道:

#!/bin/bash
echo "What is your name?"
read -r name
# 将变量内容写入指定路径的文件
echo "$name" > ~/Documents/file.txt
if [[ $name == Bob ]]; then
  echo "something"
fi

方案2:必须通过管道传递输入的实现

如果场景要求必须使用管道传递内容,可以读取变量后主动输出到标准输入再接入管道:

#!/bin/bash
echo "What is your name?"
read -r name && echo "$name" | cat > ~/Documents/file.txt
if [[ $name == Bob ]]; then
  echo "something"
fi

如果你不需要后续使用 name 变量,完全可以省略 read 直接用 cat 接收输入:

#!/bin/bash
echo "What is your name?"
# 直接将用户输入写入文件,输入完成按 Ctrl+D 结束即可
cat > ~/Documents/file.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:02