[dev] [sw] Suckless web-framework

From: <node_AT_lavabit.com>
Date: Sun, 4 Apr 2010 13:03:55 -0400 (EDT)

>> # grep thinks the second argument is a file
>> > BL="^index.md$ ^images$" # Black list
>> BL="^index.md$\|^images$" # Black list
>
> Wrong, take a look at this line:
> BL=`echo ${BL} | sed -e "s/\( \+\|^\)/ -e /g"`

Yes, -e allows you to do this. However, in the original code you had
> BL="^index.md$ ^images$" # Black list
and later...
> for i in `ls ${SITE}/${DIR} | grep -v ${BL}`; do
I know the blacklist ($BL) was meant as an example, but if you run this
code you'll see that grep errors out because it thinks `^images$' is a
file.

If you really want people to use space as a delimiter, then either do:

 for i in BL; do
         tmp="$tmp -e $i"
 done
 BL=$tmp
 grep -q $BL

or:

 set -- $BL
 IFS='|'
 BL=$*
 grep -Eq "$BL" ...

Both are pretty stupid.

>> # echo | blah is becoming rampant; let's not ignore it this time
>> > QUERY=`echo ${REQUEST_URI} | sed -e "s,.*${BIN}/*\(.*\),\1,"`
>> QUERY=`sed "s,.*$BIN/*\(.*\),\1," <<-!
>> $REQUEST_URI
>> !
>
> So, it is better to use 3 loc for this?

Sadly, POSIX shell sucks. In bash, perl and powershell you could get
away with a less verbose herestring:

 grep pattern <<< str

>> # Why heredoc instead of subshell?
>> # Compare: time for i in `seq 1 1000`; do echo str | grep pattern
>> >/dev/null; done
>> # ...with: time for i in `seq 1 1000`; do grep pattern >/dev/null <<-!
>> # str
>> # !
>> # heredocs can also contain subshells... you save one
>> # from `cmd | cmd`
>> > DIR=`dirname ${QUERY} | sed -e "s,/*$,,"`>
>> > # done
>
> I see, this is a more interesting argument for using heredocs. But,
> just a question (because I don't really know) is heredocs as standard as
> a plain "echo blah | cmd" ?

heredocs are defined by POSIX, if that's what you mean by standard

Semi unrelated question: why are so many people at suckless using ` `
instead of $( ) ? I've seen it here, dmenu_path, surf's config.h... etc.

$( ) only fails in very, very old shells... think original bourne
Received on Sun Apr 04 2010 - 17:03:55 UTC

This archive was generated by hypermail 2.2.0 : Sun Apr 04 2010 - 17:12:03 UTC