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

