我尝试制作一个用于调试的虚拟脚本。该脚本应该将命令和所有参数传递给syslog。但是当我得到一个有引号的参数时,我只会失败。
#!/bin/sh
set -x
param="$*"
logger -t $0 -p local3.debug "$*"
#logger -t $0 -p local3.debug "$param"
#logger -t $0 -p local3.debug "$(echo "$param")"
#logger -t $0 -p local3.debug "${param//\"/}"
#logger -t $0 -p local3.debug "${param[@]}"
我尝试了一些我发现的变种,但没有任何效果。
# d-iptables -L dkdsdds "ddd"
+ param='-L dkdsdds ddd'
++ echo '-L dkdsdds ddd'
+ logger -t /usr/sbin/d-iptables -p local3.debug '-L dkdsdds ddd'
logger: invalid option -- L
Usage:
logger [options] [message]
Options:
-d, --udp use UDP (TCP is default)
-i, --id log the process ID too
-f, --file <file> log the contents of this file
-h, --help display this help text and exit
-n, --server <name> write to this remote syslog server
-P, --port <number> use this UDP port
-p, --priority <prio> mark given message with this priority
-s, --stderr output message to standard error as well
-t, --tag <tag> mark every line with this tag
-u, --socket <socket> write to this Unix socket
-V, --version output version information and exit
答案 0 :(得分:2)
我建议您将脚本更改为#!/bin/bash
并使用
logger -t $0 -p local3.debug -- "$(printf "%q " "$@")"
您需要--
,因此记录器并不认为-L
是其中一个选项。
答案 1 :(得分:0)
首先,您将此标记为bash,但您使用的是/ bin / sh(可以是bourne或dash)。接下来你的记录器正在阅读 - 作为参数。请更好地引用它。
#!/bin/bash
set -x
param="\"$@\"" # quotes removed by the shell
logger -t $0 -p local3.debug "'$param'" # expand, then strong quote