ActiveMQ purge命令Bash语法错误排查及正确写法咨询
解决ActiveMQ purge命令筛选时间戳的Bash语法问题
问题核心是Bash会把未转义的<解析为输入重定向符号,试图将后面的时间戳当作文件名打开,这就是你看到错误提示的原因。而JMSPriority=0这类表达式没有特殊符号,所以能正常执行。
你可以用以下几种正确写法:
方法1:转义小于号
在<前加反斜杠\,避免Bash将其解析为重定向:
activemq purge --msgsel "JMSTimestamp \< $(date -d '-3 days' +%s000)" MYQUEUE
方法2:拆分变量拼接
先把时间戳存到变量里,再用转义后的表达式调用命令,可读性更强:
# 计算3天前的毫秒级时间戳 three_days_ago=$(date -d '-3 days' +%s000) # 执行purge命令,转义<符号 activemq purge --msgsel "JMSTimestamp \< $three_days_ago" MYQUEUE
方法3:单引号包裹表达式(拼接变量)
如果想用单引号包裹整个筛选条件,需要把变量放在单引号外面拼接(单引号内的命令/变量不会被Bash解析):
three_days_ago=$(date -d '-3 days' +%s000) activemq purge --msgsel 'JMSTimestamp < '"$three_days_ago"'' MYQUEUE
内容的提问来源于stack exchange,提问作者Loko
相关产品推荐
相关产品推荐

