YMG*_*sis 3 bash nano alias date
我试图建立对我来说,只需要输入的方式newjournal,并任命了新的日记帐分录year-month-date-time.txt中创建year的子目录~/documents/journals。
我已使用以下命令将其设置为别名:
alias newjournal='nano /home/username/documents/journals/'$(date +%Y)'/'$(date +%F-%k%M).txt''
Run Code Online (Sandbox Code Playgroud)
所以 year 子文件夹可以正确解析,而 date 命令的前半部分似乎也是如此。尝试用 附加别名sudo,没有帮助。
问题:出于某种原因,当我执行此命令时,时间值 ( %k) 解析为几分钟前...或者也许是 nano 上次运行此文件名时,也许它被称为旧缓冲区?
当我注销时,它会生成正确的文件,然后我保存,等待几分钟再试一次,它会编辑旧文件而不是创建新文件。即使我删除了旧文件,它也会使用旧文件名(时间不正确)创建一个新文件。
这是我要解释的内容的屏幕截图。在这里,我创建了一个新日志,在执行命令后的一两秒内保存在 nano 中,打印正确的日期/时间,列出创建的文件。请注意不正确的文件名时间(1249,与 13:11 并列):
无论如何,它可能很简单,但是我在别名中尝试了不同的方法,例如在整个事物周围加上双引号并正确转义,单引号,转义和空格等。
感谢阅读/帮助。Ubuntu 16.04 服务器。
编辑:这是最终有效的别名:
alias newjournal='nano /home/user/journals/"$(date +%Y)"/"$(date +%F-%H%M).txt"'
Run Code Online (Sandbox Code Playgroud)
需要在整个单引号别名中对日期命令加双引号。
当您声明别名时,date将评估这些命令。
这是一个示例别名t:
$ alias t="echo \"$(date +%k%M)\""
$ alias t
alias t='echo "1357"'
Run Code Online (Sandbox Code Playgroud)
您可以使用单引号解决此问题:
$ alias t='echo "$(date +%k%M)"'
$ alias t
alias t='echo "$(date +%k%M)"'
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Bash 中单引号和双引号的区别
或者,如果命令不需要是别名,请改用函数:
$ function t { echo "$(date +%k%M)"; }
$ declare -f t
t ()
{
echo "$(date +%k%M)"
}
Run Code Online (Sandbox Code Playgroud)
或者脚本:
#!/bin/sh
echo "$(date +%k%M)"
Run Code Online (Sandbox Code Playgroud)
$ alias t='echo '$(date +%k%M)''
$ alias t
alias t='echo 1400'
Run Code Online (Sandbox Code Playgroud)
将该别名定义视为三个字符串:
'echo '$(date +%k%M)''