logger命令遇含连字符字符串执行失败的解决求助
解决logger命令处理以连字符开头的消息时的报错问题
这个问题我之前也碰到过!根源在于logger会把以连字符-开头的参数误判为命令选项——当你的$line是-retries时,它会把-r当成无效的选项参数,所以才会抛出invalid option -- r的错误。
下面给你几个靠谱的解决办法:
方法1:用--分隔选项和消息(推荐)
这是Unix/Linux命令的通用技巧,--会明确告诉命令:后面的所有内容都是位置参数,不再解析为选项。直接修改你的命令即可:
logger -p auth.notice -t "TEST" -- "$line"
这样不管$line开头是不是连字符,logger都会把它当成普通的日志消息处理。
方法2:通过标准输入传递消息
把消息通过管道传给logger,绕开命令行参数的选项解析逻辑:
echo "$line" | logger -p auth.notice -t "TEST"
这种方式适合需要处理多行消息或者结合其他命令输出的场景。
方法3:用文件读取消息
如果消息内容比较复杂或者需要临时存储,可以先把$line写入临时文件,再用logger的-f参数读取:
# 写入临时文件 echo "$line" > /tmp/logger_msg.tmp # 读取文件内容作为日志 logger -p auth.notice -t "TEST" -f /tmp/logger_msg.tmp # 可选:用完删除临时文件 rm /tmp/logger_msg.tmp
其中方法1是最简洁直接的,优先推荐使用,完全能解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Fazlin
相关产品推荐
相关产品推荐

