[9fans] rc and spaces in file names

2013-12-20 Thread trebol
Hello,
I usually edit file names with a 'for' statement, so i can replace
spaces and other problematic characters without effort.  But today
I needed to change names keeping spaces and I found something weird.
Let be two files: 'Plan 9' and 'Plan B'.  In a korn or bourne shell I
can do something like:

$ for i in Plan*; do a=`echo $i | 9 sed s'/lan/LAN/g'`; cp $i $a; 
done
without problems with spaces.  In Plan9 I've tried

term% ifs='\n' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}}
cp: can't create PLAN 9
: bad character in file name: 'PLAN 9
'
cp: can't create PLAN B
: bad character in file name: 'PLAN B
'
'

So the last newline character is added to the file name...

I tried typing a literal newline in the ifs variable and it works:

term% ifs='
' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}}
term% ls P*
'PLAN 9'
'PLAN B'
'Plan 9'
'Plan B'

With p9p is the same.  I'll appreciate If anyone can tell me why.

trebol.


Re: [9fans] rc and spaces in file names

2013-12-20 Thread Tristan
 term% ifs='\n' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}}
 cp: can't create PLAN 9
 : bad character in file name: 'PLAN 9
 '
 cp: can't create PLAN B
 : bad character in file name: 'PLAN B
 '
 '

 So the last newline character is added to the file name...

 I tried typing a literal newline in the ifs variable and it works:

 term% ifs='
 ' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}}
 term% ls P*
 'PLAN 9'
 'PLAN B'
 'Plan 9'
 'Plan B'

 With p9p is the same.  I'll appreciate If anyone can tell me why.

rc doesn't do backslash escapes.

tristan

-- 
All original matter is hereby placed immediately under the public domain.



Re: [9fans] rc and spaces in file names

2013-12-20 Thread erik quanstrom
 I tried typing a literal newline in the ifs variable and it works:
 
 term% ifs='
 ' for(i in Plan*){cp $i `{echo $i | sed 's/lan/LAN/'}}
 term% ls P*
 'PLAN 9'
 'PLAN B'
 'Plan 9'
 'Plan B'
 
 With p9p is the same.  I'll appreciate If anyone can tell me why.
 

i'm not sure which question you have.  i'll try to answer the two i see.
'\n' doesn't work because rc doesn't interpret \ except as the last character
of a line.  plan 9 ls helpfully quotes file names that might need quoting
if fed to rc.  ls -Q will get rid of the quotes. (see ls(1).)  so the file names
do not include the single quotes.  if they did, you'd see '''Plan B'''.

- erik



[9fans] rc and spaces in file names

2013-12-20 Thread trebol
Ok, thanks to both.  I got confused with this part of rc(1):

`{command}
   rc executes the command and reads its standard output,
   splitting it into a list of arguments, using characters
   in $ifs as separators.  If $ifs is not otherwise set,
   its value is ' \t\n'.



Re: [9fans] rc and spaces in file names

2013-12-20 Thread erik quanstrom
On Fri Dec 20 09:48:29 EST 2013, trebol55...@aol.com wrote:
 Ok, thanks to both.  I got confused with this part of rc(1):
 
 `{command}
rc executes the command and reads its standard output,
splitting it into a list of arguments, using characters
in $ifs as separators.  If $ifs is not otherwise set,
its value is ' \t\n'.

that's a good point.  it looks like the wrong conventions were applied
to that string.  ironically, one would guess, this was to solve a
readability problem.  perhaps ... otherwise set, space, newline, tab will
be used as separators would be more precice even if it doesn't read
as well.

- erik