如何将日期和文本作为别名附加到文件?

如何将日期和文本作为别名附加到文件?

我想创建一个别名来将带有日期的注释附加到文件。(我想重现的用例:Sebastian Daschner - 作为开发人员如何有效地做笔记

到目前为止,我已经能够附加日期,但我无法找到一种方法来从用户输入中附加日期和注释。

用法

append-to-file 'my text'

预期结果file.txt

2021-08-30 : some previous text
2021-09-01 : my text

我迄今为止写过的别名

alias append-to-file='tee -a file.txt <<< $(echo $(date -I) :)'

答案1

你可以用一个小脚本来实现这一点。一种方法可能是:

#!/bin/bash
echo "$(date -I) : $@" >> file.txt
tail -n 1 file.txt

变量$@代表您在命令行输入的任何内容。该tail命令会将文件的最后一行回显到屏幕上。

将此脚本保存在您的~/bin.local/bin目录中,并命名为append-to-file。如果目录不存在,则创建该目录。下次登录时,这两个目录中的任何一个都将包含在您的 PATH 中。然后您可以随时输入该命令。您输入的内容将保存在file.txt当前工作目录中的文件中。

答案2

如果您想要将文本消息作为参数传递,那么您应该查看 shell 函数而不是别名。

您可以考虑使用 moreutils 包中的 ts(时间戳)实用程序:

append-to-file () { printf '%s\n' "$*" | ts '%Y-%m-%d :' >> /path/to/myfile.txt ; }

如果ts没有选择,你将文本插入命令的格式字符串中date- 但需要小心%字符:

append-to-file () { msg="$*"; date "+%Y-%m-%d : ${msg//%/%%}" >> /path/to/myfile.txt ; }

或者 (感谢@bac0n)也许更安全,使用 bashprintf函数自己的时间格式化功能——不需要%在此方法中替换 s,因为消息是作为字符串参数传递的,而不是嵌入在格式字符串中:

append-to-file () { printf '%(%Y-%m-%d)T : %s\n' -1 "$*" >> /path/to/myfile.txt ; }

如果你希望它也回显到终端,请替换>>| tee -a

相关内容