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

如何用cat命令使标准输入按回车终止以传递密码短语?

解决cat命令按回车键终止输入并保留原始密码短语的问题

问题分析

你当前使用cat > /tmp/namedpipe时,cat会持续读取标准输入直到收到EOF(终端中需按Ctrl+D)或被Ctrl+C中断,无法通过回车键终止输入。同时你需要完整保留密码短语的原始输入(包括首尾空格、制表符),用于共享给两个解锁脚本。

解决方案

方案1:单行read命令(与原逻辑一致,推荐)

将你原来的6行代码简化为一行,既保留原始输入、支持按回车终止,又能及时清空变量保证安全:

IFS= read -r passphrase && { printf -- '%s' "$passphrase" > /tmp/namedpipe & } && unset passphrase
  • IFS=:禁止read修剪首尾的空格、制表符
  • read -r:不转义输入中的反斜杠,完全保留原始内容
  • { ... & }:将写入命名管道的操作放入后台,避免因管道无读取端导致进程阻塞
  • unset passphrase:立即清空密码变量,降低泄露风险

方案2:cat结合head(更简洁,需注意换行符)

如果允许密码短语末尾包含换行符(即输入回车后的换行),可以用以下命令实现按回车终止输入:

cat | head -n1 > /tmp/namedpipe
  • head -n1:仅读取第一行输入,遇到回车就停止读取
  • 若不需要末尾的换行符,可追加处理去掉:
    cat | head -n1 | sed '$s/\n$//' > /tmp/namedpipe
    

关键说明

  • 避免使用echo输出密码:echo会自动添加换行符,部分环境下还会转义特殊字符,破坏原始输入
  • 命名管道特性:写入管道时若没有进程在读取,会阻塞当前进程,因此建议将写入操作放入后台(如方案1中的&)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:54:31