我想创建一个别名,.bashrc
以便我可以在名为 ISO date 的文件夹中创建 Markdown 或文本文件格林威治标准时间然后在编辑器中打开该文件。
这是我期望的输出(示例):
./20211226220131/readme.md
并已readme.md
在 中打开vim
。
答案1
假设您使用的是bash
4.2 或更高版本:
edmd () {
local now
TZ=GMT printf -v now '%(%Y%m%d%H%M%S)T' -1
mkdir "$now" && "${EDITOR:-vim}" "$now/readme.md"
}
此 shell 函数创建一个名为 的局部变量now
,其中包含 GMT 时区的当前时间戳。然后,它创建一个以此时间戳命名的目录,如果成功,它允许您readme.md
使用首选编辑器编辑其中的文件,或者vim
如果EDITOR
该目录为空或未设置。
这个 shell 函数将在您通常声明别名的任何地方声明,并像这样使用:
$ edmd
shell 函数不依赖于外部date
实用程序,并且不会意外更改您当前的工作目录。
测试:
$ edmd
(我的编辑器打开,我输入一些内容,保存文件,然后退出编辑器。)
$ tree
.
`-- 20211226092420
`-- readme.md
1 directory, 1 file
另请注意,日期和时间的 ISO 8601 格式写为
- “2021-12-26T14:52:04Z”,或
- “20211226T145204Z”
在 UTC 时区,或作为
- “2021-12-26T14:52:04+00:00”
...其中“00:00”给出了相对于 UTC 的时间偏移。
因此你可以使用
TZ=UTC printf -v now '%(%Y-%m-%d-T%H:%M:%SZ)T' -1
或者
TZ=UTC printf -v now '%(%Y%m%dT%H%M%SZ)T' -1
或者
TZ=GMT printf -v now '%(%Y-%m-%d-T%H:%M:%S%z)T' -1
...获得“ISO 日期”。
答案2
如果您正在为您创建的脚本寻找别名(而不是调用脚本),它看起来像这样:
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && cd "$d" && vim readme.md'
如果您希望保留在执行别名的同一文件夹中(而不是/[date]
退出 vim 后最终位于该文件夹中),请cd
在子 shell 中使用(效果是cd
子 shell 本地的):
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && ( cd "$d" && vim readme.md )'
或者,根本不更改目录:
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && vim "$d/readme.md"'
答案3
您可以使用别名轻松完成这一切,是的:
alias foo='mkdir -p "$(TZ=GMT date +"%Y%m%d%H%M%S")" && vim "$_"/readme.md'
您希望这样-p
,如果目录已经存在,您仍然可以readme.md
在其中编辑或创建文件。将命令TZ=GMT
的时区设置date
为 GMT。该$_
变量保存为上一个命令提供的参数,因此将在刚刚创建的目录中vim $_/readme.md
打开一个文件。readme.md
从man bash
:
_
在 shell 启动时,设置为用于调用在环境或参数列表中传递的 shell 或正在执行的 shell 脚本的路径名。随后,扩展至在扩展后在前台执行的上一个简单命令的最后一个参数。
答案4
我通过创建这个脚本找到了解决方案
#!/bin/bash
d="$(TZ=GMT date +"%Y%m%d%H%M%S")"
mkdir "$d"
cd "$d"
vim readme.md