Bash别名在文件名

时间:2018-04-24 18:32:02

标签: bash git date adb

首先,我在这里阅读了帖子: Bash alias create file with current timestamp in filename

但是,当我运行它时,我会继续获得相同的时间戳。这对我来说毫无意义。

我在Windows 10上运行Git bash(来自git 2.16.2)。我在〜/ .bash_aliases中添加了以下行: alias logfile="adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/'$(date +%Y-%m-%d@%Hh%Mm%Ss)'-FullLogCat.log"

这似乎创建了一个日志文件,并在屏幕上显示ADB日志,正如我想要的那样。但是,实际日期似乎在终端加载的同时“卡住”。例如,我在下午2:29:09加载终端,然后等到下午2:30:00调用别名,文件标记为“2018-04-24@14h29m09s-FullLogCat.log”。看起来,当配置文件将别名加载到内存中时,它会执行日期函数。

有没有办法防止这种情况发生?这只是一个奇怪的git bash事吗?

更新:解决方案

alias logfile='adb logcat -v threadtime *:V | tee /c/Users/ghannan/Desktop/adb-logs/''$(date +%Y-%m-%d@%Hh%Mm%Ss)''-FullLogCat.log

3 个答案:

答案 0 :(得分:2)

这应该是一个功能(因为你应该问自己的问题是&#34;这个是否是一个功能有什么原因?&#34;):< / p>

logfile () {
    dt=$(date +%Y-%m-%d@%Hh%Mm%Ss)
    output="/c/Users/username/Desktop/adb-logs/$dt-FullLogCat.log"
    adb logcat -v threadTime *:V | tee "$output"
}

来自bash手册页:

  

对于几乎所有目的,别名都被shell函数取代。

答案 1 :(得分:1)

您需要转义别名中的$,以便每次调用别名时都会运行date命令。目前,只有在创建别名时才会运行。

编辑:您还需要删除date扩展中的单引号,因为此线程中的其他人已指出。

$ alias logfile="adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/'$(date +%Y-%m-%d@%Hh%Mm%Ss)'-FullLogCat.log"
$ alias | grep adb
alias logfile='adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/'\''2018-04-24@13h39m08s'\''-FullLogCat.log'

您可以在上面看到,但没有转义$日期被硬编码到别名中。

$ alias logfile="adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/\$(date +%Y-%m-%d@%Hh%Mm%Ss)-FullLogCat.log"
$ alias | grep adb
alias logfile='adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/'\''$(date +%Y-%m-%d@%Hh%Mm%Ss)'\''-FullLogCat.log'

在此示例中,我们已转义$,它现在是别名的一部分,并将按预期运行

HTH

答案 2 :(得分:1)

在实际执行别名之前,使用单引号来阻止命令替换。

alias logfile='adb logcat -v threadtime *:V | tee /c/Users/username/Desktop/adb-logs/$(date +%Y-%m-%d@%Hh%Mm%Ss)-FullLogCat.log'
# ............^................................................................................................................^