This is not a bug in cfengine, it is the shell that is turning the $ into
nothing.
Cfengine interprets the string correctly and passes it to the shell as this
shows.
"MyClass" expression = "MyClass" expression => returnszero("/bin/echo x
$(const.dollar)y", "useshell");
x
> returnszero("/bin/echo x $(const.dollar)y", "noshell");
x $y
Jean-Noël Rivasseau wrote:
> Hello, I discussed this issue in the help ML before but it really
> appears like it is a bug.
>
> Basically, cf-engine chokes on ${const.dollar}( ... ) in command strings
> passed to returnszero function. However $() in a shell (Bash) can be
> very useful as it triggers a subshell. There is a bug in the parser
> somewhere as this example demonstrates:
>
> body common control
> {
> bundlesequence => {"configurePhase"};
> }
>
> bundle agent configurePhase
> {
> classes:
> "MyClass" expression => returnszero("/bin/echo
> ${const.dollar}(cat /etc/hosts)", "useshell");
> "MyClass2" expression => returnszero("/bin/echo `cat
> /etc/hosts`", "useshell");
> reports:
> MyClass::
> "Hi World";
> MyClass2::
> "Hello World";
> }
>
>
> MyClass2 will correctly be defined, but not MyClass as cf-engine will
> refuse to run the first command - the parser gets confused and attempts
> to solve 'cat /etc/hosts' as a variable it seems. I checked this on
> today's SVN and the problem is still present. Please correct it :)
>
> Cheers
> Jean-Noel
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Bug-cfengine mailing list
> [email protected]
> https://cfengine.org/mailman/listinfo/bug-cfengine
--
Mark Burgess
-------------------------------------------------
Professor of Network and System Administration
Oslo University College, Norway
Personal Web: http://www.iu.hio.no/~mark
Office Telf : +47 22453272
-------------------------------------------------
_______________________________________________
Bug-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/bug-cfengine