spaces in pathnames
Glynn Clements
glynn at gclements.plus.com
Mon Jun 30 07:11:23 PDT 2008
Jeremy Huddleston wrote:
> So I just pushed a patch to xinit that addresses some issues with
> spaces in pathnames. One issue remains, and I'm not sure if there's a
> clean way to address it. At first, I thought I could do something
> like this:
>
> - serverargs=${serverargs}" -auth "${xserverauthfile}
> + serverargs=${serverargs}" -auth '"${xserverauthfile}"'"
>
> but that doesn't work. example:
>
> $ mya="Some thing with spaces"
> $ myargs="1 2 '$mya'"
> $ ./printargs $myargs
> argv[0] = ./printargs
> argv[1] = 1
> argv[2] = 2
> argv[3] = 'Some
> argv[4] = thing
> argv[5] = with
> argv[6] = spaces'
>
> So... any thoughts on how to overcome this cleanly? And no, telling
> people to not use spaces is unfortunately not an option... and neither
> is hitting them over the head with a do-better stick.
IMHO, it's a lost cause.
The only clean solution is to use a language which has a list datatype
(or equivalent), as well as an "exec" primitive which accepts a list
argument.
It's practically impossible to get this 100% right if you're limited
to the Bourne shell.
You need to represent a list of strings, but the only datatype you
have available is a string, so you need a separator, but you also need
some way to represent the field separator when it occurs in a list
element. So you use quotes or an escape character, but then you need
to handle the case where the quote or escape characters appear in an
element.
I can't say for certain that it's absolutely impossible, but any
solution will be both ugly and fragile.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the xorg
mailing list