首先,我在这里阅读了帖子: 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
答案 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'
# ............^................................................................................................................^