I have this bash(version 3.2 on MacOS) function
rtf(){ local filter=${1//*/(.)*}; local bin="vendor/bin/phpunit --filter=" local command=$bin"'/"$filter"/i'"; echo $command; $command; }
What it’s suppose to do is run phpunit with proper regex, here i am converting *
to (.)*
and wrapping filter to be case insensitive.
Now
$ rtf test*fail // results in vendor/bin/phpunit --filter='/test(.)*fail/i'
The problem is that parsed command works perfectly fine(matched test cases run), when i run directly at terminal. But it does not when function rtf
tries to call it in last line. Somehow phpunit can not find matchings for this.
I can believe that the issue is with forward slash in the $command
variable. Can any suggest a fix?
Advertisement
Answer
You should use eval "$command"
rather than $command
. See following example:
[STEP 101] $ cmd="echo 'foo'" [STEP 102] $ $cmd 'foo' [STEP 103] $ eval "$cmd" foo [STEP 104] $
And it’s not safe to write rtf test*fail
, instead it should be rtf "test*fail"
otherwise test*fail
will be expanded to filenames if the pattern matches some files.