我想创建一个别名来将带有日期的注释附加到文件。(我想重现的用例: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