如何向文件追加多段数据?Shell追加日期和自定义消息失败怎么解决
原有写法的错误原因
date; message >> updatelog.txt:分号仅用于分隔两个独立命令,该写法只会将message的输出写入文件,date的输出会直接打印到终端,不会存入文件。date + message >> updatelog.txt:date命令中+后需接合法的时间格式化参数,message不属于合法参数,命令执行会直接报错。date & message >> updatelog.txt:&的作用是将前一个命令放到后台执行,依旧只有message的输出会被写入文件,两个命令的输出没有关联。date | message >> updatelog.txt:管道的作用是将前一个命令的标准输出作为后一个命令的标准输入,除非message是可接收标准输入的程序,否则无法实现两个内容合并写入的效果。date && message >> updatelog.txt:&&是逻辑与符号,仅在前一个命令执行成功后才会执行后一个命令,仍然只有message的输出会被追加到文件,date的输出不会进入文件。
正确实现方案
方案1:分两次追加(简单直观)
适合不需要把时间和更新内容放在同一行的场景:
date >> updatelog.txt echo "你的更新内容" >> updatelog.txt
如果更新内容存在名为message的变量中,替换为echo "$message"即可。
方案2:命令分组单次追加(推荐)
用大括号把所有需要执行的命令包起来,统一将全部输出重定向到文件,仅打开一次文件,性能更好:
# 时间和内容各占一行 { date; echo "$message"; } >> updatelog.txt
注意大括号和内部命令、末尾分号之间必须有空格,否则语法不生效。如果需要把时间和更新内容合并到同一行,可以用:
# 时间和内容在同一行 echo "$(date) $message" >> updatelog.txt
方案3:格式化输出
如果需要固定输出格式,用printf更灵活:
printf "更新时间:%s \n更新内容:%s \n---\n" "$(date)" "$message" >> updatelog.txt
内容的提问来源于stack exchange,提问作者yonasuriv
相关产品推荐
相关产品推荐

