如何实现Bash别名将Unix时间戳设为缓存清除用版本标签?
解决Bash别名中命令未执行的问题
这问题我太熟悉了!你遇到的核心问题是:Bash别名默认会把整个别名内容当作纯字符串展开,不会自动执行其中的命令。所以你直接写date +%s的话,CLI工具收到的就是字符串"date +%s",而不是它的执行结果。
正确的解决方法:用命令替换让shell先执行命令
你需要用Bash的命令替换语法$(command),让shell先执行date +%s拿到Unix时间戳,再把结果传给你的CLI工具。
假设你的CLI工具是set-version-tag(用来设置versiontag变量),对应的别名应该这么写:
alias set-version='set-version-tag $(date +%s)'
如果你的需求是直接设置环境变量VERSIONTAG,那别名可以写成:
alias set-versiontag='export VERSIONTAG=$(date +%s)'
原理说明
$(date +%s)会触发Bash先执行date +%s命令,获取当前的Unix时间戳输出- 这个输出结果会替换掉
$(date +%s)这个部分,再作为参数传给你的CLI工具或者环境变量赋值 - 旧的命令替换写法是用反引号
`date +%s`,虽然也能用,但$()的可读性更好,而且支持嵌套,更推荐使用
验证一下
设置好别名后,执行set-versiontag,然后运行echo $VERSIONTAG,你应该能看到一串数字(当前Unix时间戳),而不是字符串"date +%s",这就说明命令替换生效了。
内容的提问来源于stack exchange,提问作者Asitis
相关产品推荐
相关产品推荐

