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

Re: greps pipes and eval bad patterns



On 10/25/2015 06:17 PM, Kurtis Rader wrote:
In addition to what Bart said I'll point out that it's usually easier and
safer to avoid the eval by using an if/else block. Getting the quoting
right when using eval can be very difficult. Especially if you don't have
direct control over the text being eval'd; e.g., if some of it is supplied
by the user; or even just built up from earlier parts of the function.

I have several functions where 99% of the time I want the output
automatically piped into my pager (e.g., /usr/bin/less). But if the output
of the function is redirected away from my tty I don't want the pager in
the pipeline. So instead of using a variable that would normally contain "|
$PAGER" and sometimes be empty (i.e., using Ray's approach) I simply spell
it out:

     if [[ -t 1 ]] ; then
       grep -h -E $case_insensitive -- "$search_for" $files | $PAGER
     else
       grep -h -E $case_insensitive -- "$search_for" $files
     fi

That's exactly the sort of thing I did before in this sort of situation. I take your caveats seriously tho. Mostly I was just interested in the problem for my education. I can quite see that eval could do some weird stuff if the input was uncertain. What matters most is that the code is clear both to read and to execute. Having a pipe inside a variable seems unsound.



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