Backticks in RainerScript just got smarter: ${VAR} and adjacent text now work
TL;DR
Backticks with echo in RainerScript now support brace-style environment variables (${VAR}) and adjacent text (e.g., `echo sasl.password=${KAFKA_PASSWORD}`). This removes a common pitfall when assembling key=value pairs for modules like omkafka. It’s still a limited, intentional subset—not a full shell. The change was motivated by real-world confusion reported in issue #5827. (GitHub)

What changed (and why)
Previously, backticks did not recognize ${VAR}, and unbraced $VAR sometimes swallowed trailing punctuation, breaking practical use cases (like key=value strings). That led to parsing errors such as “missing equal sign in parameter” when users tried to inject SASL credentials into omkafka via env vars. (GitHub)
The new logic:
- Understands
${VAR}and stops at the closing}. - For unbraced
$VAR, stops at the first non-[A-Za-z0-9_]character and emits that character literally, so patterns like$VAR!work as expected. - Remains intentionally small: no general shell evaluation (e.g., no
$(...)). That’s by design and documented. (rsyslog.com)
Result: patterns admins expect from daily shell usage now behave sensibly inside RainerScript backticks—without turning backticks into a shell. (rsyslog.com)
Practical example: omkafka SASL password from an env var
Before (clunky workaround)
You often had to pre-compose the full key=value into an environment variable and then expand it:
# in a secure environment file or service unit
export SASL_PWDPARAM='sasl.password=${KAFKA_PASSWORD}'
export KAFKA_PASSWORD='supersecret'
# rsyslog.conf
action(
type="omkafka"
broker=["kafka.example.com:9093"]
confParam=[
"security.protocol=SASL_SSL",
"sasl.mechanism=SCRAM-SHA-512",
"sasl.username=myuser",
`echo $SASL_PWDPARAM`
]
)
Users hit errors like “missing equal sign” while trying variations around this approach. (GitHub)
Now (direct and clear)
Compose the key=value inline with ${…}:
export KAFKA_PASSWORD='supersecret'
action(
type="omkafka"
broker=["kafka.example.com:9093"]
confParam=[
"security.protocol=SASL_SSL",
"sasl.mechanism=SCRAM-SHA-512",
"sasl.username=myuser",
`echo sasl.password=${KAFKA_PASSWORD}`
]
)
This matches everyday expectations while staying within RainerScript’s documented backtick subset. For reference, see the omkafka and RainerScript docs. (rsyslog.com)
Availability
- Merged: August 15, 2025.
- Daily stable build: August 16, 2025.
- Scheduled stable build: 8.2508.0 later in August.
If you use the daily stable channel, you can pick it up right away; otherwise you’ll get it with 8.2508.0.
Security & ops notes
- Prefer environment files (e.g., systemd
EnvironmentFile=) with strict permissions over hard-coding secrets inrsyslog.conf. - Remember that process environments are visible to privileged users via
/proc; secure the host accordingly. - This change is backward-compatible, fixing previously broken or surprising edge cases.
Background & related reading
- Issue #5827 – omkafka: unable to use environment variable to password
sasl.password(parse error context and motivation). (GitHub) - RainerScript string constants – canonical reference for backticks and their intentional limitations. (rsyslog.com)
omkafkamodule docs – configuration parameters and examples. (rsyslog.com)
If you previously worked around this with pre-composed env vars, you can simplify your configs now. And if you see anything unexpected, please share a minimal snippet—reports like #5827 help us make rsyslog better for everyone. (GitHub)
