如何用Bash脚本在AIX服务器读取控制台多行内容存文件并保留换行
问题修复方案
根因说明
换行丢失由两个错误写法导致:
- 未用双引号包裹变量输出:
echo $keyvariable会触发Shell的字段拆分规则,所有连续空白符(换行、制表符、空格)都会被替换为单个空格,直接丢失原始换行 - 逐字符读取逻辑中额外手动追加了
$'\n',打乱了原输入的换行结构
修复后脚本
#!/bin/bash echo "Paste the Bulletin:" keyvariable="" # 超时2秒判定粘贴结束 while IFS= read -d '' -n 1 -t 2 c do keyvariable+="$c" done # 双引号包裹变量完全保留原始格式写入 printf "%s" "$keyvariable" > abc.txt echo "Thanks!"
关键修改点
- 移除循环内多余的
$'\n'追加逻辑,原输入的换行符会被正常读取无需额外添加 - 改用
printf+双引号包裹变量输出,100%保留输入的所有原始字符,包括换行、特殊符号 - 移除首行多余的单次
read逻辑,避免吞掉输入的第一个字符
AIX环境运行注意事项
- AIX默认Shell为ksh,该脚本依赖Bash特性,请确保执行时使用Bash解释器,可先给脚本加执行权限后直接运行:
chmod +x 你的脚本名称.sh && ./你的脚本名称.sh - 完成内容粘贴后等待2秒,脚本会自动检测输入结束并写入文件
内容的提问来源于stack exchange,提问作者The KNVB
相关产品推荐
相关产品推荐

