Bash脚本中如何让logger不解析日志消息内的选项参数?
解决Logger解析消息中选项的问题
有两种可靠的方法可以避免logger把消息内容当成命令选项解析:
方法1:用--标记选项结束
绝大多数类Unix命令都支持用--来明确区分选项和后续的非选项参数。把它放在所有logger选项之后、消息内容之前,就能让logger把--后面的所有内容都当成纯消息文本,不再解析为选项:
logger -p local0.notice -t TagToUse -- "$@"
这样不管$@里包含-u还是其他以-开头的内容,都会被完整记录为日志消息,不会触发错误。
方法2:通过标准输入传递消息内容
你之前的写法有误(用了>重定向到文件,而不是传给logger进程),正确的做法是用管道|把内容传给logger的标准输入。这种方式下,logger不会读取标准输入里的内容作为选项,只会当成日志消息:
如果想把所有参数拼接成单个字符串记录:
echo "$*" | logger -p local0.notice -t TagToUse
如果要保留每个参数的独立格式(比如参数里的空格或引号),用printf更稳妥:
# 所有参数用空格分隔输出 printf '%s ' "$@" | logger -p local0.notice -t TagToUse # 每个参数单独占一行 printf '%s\n' "$@" | logger -p local0.notice -t TagToUse
内容的提问来源于stack exchange,提问作者Lithilion
相关产品推荐
相关产品推荐

