【发布时间】:2023-11-28 10:30:01
【问题描述】:
我尝试制作一个用于调试的虚拟脚本。该脚本应将命令和所有参数传递给 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
【问题讨论】:
-
听起来像Bash FAQ 50。你的直接问题是你想要
"$@",但我猜它不会把你带到你想去的地方。但就是不想去那里。 -
我只想去掉 var 中的引号,我可以将它们作为消息传递给记录器
-
如果您试图将参数逐字转发给其他命令,那么在调用其他命令时只需使用
"$@",如三元组所示。如果那 不 对您正在尝试做的事情起作用(我确信它会),那么编辑您的问题以说明 为什么 您认为它不起作用。 -
如果您要发布自己的答案,请将其发布为新答案;不要将其编辑到问题中-这样可以对答案进行赞成/反对/评论/等。与问题分开。
-
对不起,我不想鞭打好的提示,这帮助我找到了自己的方式:)
标签: bash quotes double-quotes