i think the real error was that you started the echo with a double quote and ended with a single quote. had you properly wrapped it with single quotes it would have worked. even if you had escaped the double quote, there still would have been an error because you’d have a multi-line string with no ending
"
(the 2nd double quote was properly escaped so that would not have terminated your string)Also, you didn’t escape your slashes.
Either it should have looked like this:
echo '# FYI quotes(") must be escaped with \ like \"'
or this:
echo "# FYI quotes(\") must be escaped with \\ like \\\""
No, because neither of those are the inputs. The input was the systemd file in the image. The whole command was not printed in the error, only surrounding context. The single-quote was indicating the ending of that context(because it was the end of the line) printed by the error.
The same thing was done with
`)'
on the first line of errorHere’s what I’m reading:
startup-script
line 27 threw the error.I’m reading this and interpreting that line 27 of that script is
sudo echo "# FYI quotes(") must be escaped with \ like \"
I am confused why there is no trailing double quote, the last 3 chars should be
\""
so perhaps this is a bad assumption but the best I can do with the available information.So the fix here is to change
startup-script
line 27 so that you’re notecho
ing things that might contain characters that might be interpreted by echo or your shell.Now if
startup-script
is provided by your distro, there may be a reason that it’s using echo, but I will tell you now whatever dipshit reason they provide they’re fucking wrong because EXHIBIT A:# "
fucks the script and rule 0 of linux is “don’t break userspace”.Everything else allows any printable char after the
#
in a comment, that script is not special, comments are not to be interpreted by the program. That is a show-stopping bug instartup-script
and must be fixed.EOF
I’m reading this and interpreting that line 27 of that script is
And your interpretation is wrong. Line 27 is actuallly
sudo echo "${server_service}" > /lib/systemd/system/server.service
${server_service}
is read from the file I posted in the 2nd image. Since it was a test script I hadn’t bothered implementing any escaping tools, I wanted to make sure terraform allowed this first.And there’s your problem. You’re
echo
ing using double quotes which will interpret characters. Don’t do that. That’s a bug.cat
orcp
the file to the destination;printf
if the contents are all in that variable.
is that really a thing for unit files? Why the hell a comment needs escaping?
To avoid having it hosted separately its injected into a shell script as a string
I don’t know the system in question, but it’s definitely a bad design when comments need to be written with care. Either you set this up in a really wonky way, or the system you’re using did and it should be fixed ASAP.
What code is in charge of injecting things into a shell script?
You haven’t met Tom. Have you even tried JDSL?