> an arcane shell expression Hey now, I happen to think that the $() syntax is much more elegant than those awkward backticks ;-)
Paul Krizak 7171 Southwest Pkwy MS B200.3A Senior Systems Engineer Austin, TX 78735 Advanced Micro Devices Desk: (512) 602-8775 Linux/Unix Systems Engineering Cell: (512) 791-0686 Silicon Design Division Fax: (512) 602-0468 On 12/11/09 12:33, Mark Burgess wrote: > > Ok, I have examined this further and you are correct that there is a problem > in mistaking > an arcane shell expression for an unexpanded variable. This is nothing to do > with the > parser, it occurs in validation, but I've fixed this at least for new class > of cases > > You may confirm that the current svn works with this code: > > body common control > { > bundlesequence => {"configurePhase"}; > } > > bundle agent configurePhase > { > classes: > > "defs" expression => returnszero("/bin/echo $(const.dollar)(/bin/cat > /etc/passwd)> > /dev/null","useshell"); > > #commands: > # "/bin/echo $(const.dollar)(/bin/cat /etc/passwd)" > # contain => shell; > > reports: > > defs:: > > "returned zero"; > > !defs:: > > "no shell"; > } > > body contain shell > { > useshell => "true"; > } > > Jean-Noël Rivasseau wrote: >> Mark, >> >> this is indeed a bug. Read carefully my example and try it. It fails because >> of the ${const.dollar}(cat /etc/hosts), eg >> only because ${const.dollar} is followed by ( ... ). In your example you >> don't have that, $(const.dollar)y works fine >> because it does not reproduce the bug at all. With my example, cf-engine >> will *refuse* to run the command and launch the >> shell. >> >> Please try with my example and see for yourself. >> >>> 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 Bug-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/bug-cfengine