Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: convolutions

On Sat, Nov 7, 2015 at 7:16 AM, Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:
> On 11/06/2015 09:37 PM, Mikael Magnusson wrote:
>> A smart thing to include when asking for a simpler way to do an obfuscated
>> thing is what it is you're actually trying to do. Saves people the effort of
>> trying to deobfuscate your code first. It's also super unclear what you mean
>> by "expanding $red into native".
> ... expanding color variables, eg. " ${red} " into their native " \e[31;1m "
> in a file.
> That isn't clear?

No, because 'expanding into "\e"' means nothing useful, did you mean a
literal backslash followed by an e, or a literal escape?

> Variables holding color codes seem like a very routine
> thing  to me, there are many of them as a standard part of the shell. If you
> have some long string with color variables ( eg. "$_red" ) in it, and you
> echo the string, the colors execute, but if you save that same string to a
> file and 'cat' it, the color variables do not expand

If you store the string in a parameter and echo that parameter, the
color variables also don't expand.

>--it is necessary to
> convert them to the actual escape codes. My code snippet does that, I'm just
> wondering if it's as simple as it can be.

If you have a parameter with \e in it, and want to expand it to a
literal escape byte, the easiest way is to use ${(g::)red}.

So you have a file with "${red}" in it, and you want to read in the
file, and substitute the value of any parameter references. Moreover,
these parameters are not defined in the file, but are set in the shell
environment and you happen to know that they are string
representations of color escape sequences, and you want to expand
these as well.

Perhaps you should take a step back and redesign whatever it is you're
doing, because it really doesn't seem like a good way to handle things

If your file has a semicolon in it somewhere, then your command will
run arbitrary code. Bart's example doesn't have that exact problem,
but will still execute code if there are things like $(command) in the

Mikael Magnusson

Messages sorted by: Reverse Date, Date, Thread, Author