Bash:别名中的缓存命令结果?

时间:2013-04-26 09:21:05

标签: bash caching alias

我在bash中有一个别名,如下所示:

alias bblog="ssh -t  bbdev tail -f /var/logs/bb/stdout-stderr-`date \"+%Y%m%d\"`.log"

它工作正常,除非时钟转到第二天,(通过午夜),我必须重新运行bblog来拖尾下一个日志。但date \"+%Y%m%d\"仍会返回上一个日期。它似乎缓存了价值。所以它仍然拖尾以前的日志。

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:9)

将别名放在单引号中,这会抑制反引号评估直到使用时间。

alias bblog='ssh -t  bbdev tail -f /var/logs/bb/stdout-stderr-`date "+%Y%m%d"`.log'

我建议使用$()代替反引号,因为它更容易理解逻辑。

它的一个更简单的例子是:

alias foo='echo $(date)'

argle:~$ foo
Fri Apr 26 10:29:14 IST 2013
argle:~$ foo
Fri Apr 26 10:29:15 IST 2013

答案 1 :(得分:2)

用shell函数替换你的别名:

bblog () {
    ssh -t bbdev tail -f /var/logs/bb/stdout-stderr-$(date "+%Y%m%d").log
}

这会将调用推迟到date,直到您实际运行该函数为止,使引用更简单。它也更灵活,允许您在需要时传递参数。例如,您可以指定要登录的备用主机:

bblog () {
    host=${1:-bbdev}
    ssh -t "$host" tail -f /var/logs/bb/stdout-stderr-$(date "+%Y%m%d").log
}

$ bblog          # Check bbdev
$ bblog bother   # Check a different host