You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:55:42