[ale] [Slightly OT] Help with a quick shell script?

Charles Shapiro hooterpincher at gmail.com
Wed Aug 16 10:32:04 EDT 2006


Oops, actually you should use "export IFS=\
".

Looks like otherwise you'll have trouble with 'n' in your output due to
annoying quoting issues. This script works for me:

#!/bin/bash
for ii in `cat biff`
do
        echo $ii | tr ' ' '!'
done
export IFS=\

for ii in `cat biff`
do
        echo $ii | tr ' ' '!'
done


Producing the output:

foo
bar
baz
bash
baz
bash
foo
bar
bif
boo
bang
bak
nnnn
foo!bar!baz!bash
baz!bash!foo!bar
bif!boo!bang!bak
nnnn

>From the file:

foo bar baz bash
baz bash foo bar
bif boo bang bak
nnnn


-- CHS


On 8/16/06, Charles Shapiro <hooterpincher at gmail.com> wrote:
>
> Uh, have you experimented with the bash "IFS" variable?  ${IFS} is what
> the for loop uses to separate its words. By default it is space, tab, or
> newline. But changing the line "IFS="\n" will make it newline only.  My
> advice is to set it back immediately after you're done or much wacky fun may
> ensue.
>
> -- CHS
>
>
> On 8/16/06, fd0man??The Magical Floppy Man <fd0man at gmail.com> wrote:
>
> >  I cannot seem to figure this out.  I am attempting to write a small
> > shell script that I can use from within Nautilus to convert MP3 files to Ogg
> > Vorbis, with just a right-click.  However, I cannot get the thing to work
> > for paths/file names with spaces in them.  Since most people I know name
> > their files with spaces, it is a case that I would like to handle.  Here is
> > the script as I currently have it:
> >
> > files=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 } ' | sed -e s#\"\"##)
> >
> > for mp3file in $files
> >  do
> >
> >   echo "Processing file ${mp3file}?"
> >   file "$mp3file" | grep '(MP3)|(MPEG)' > /dev/null
> >   if [ $? -eq 0 ];
> >    then
> >     echo "Debug:  File is an MP3 file.  Going ahead with the conversion?";
> >
> >     NewMusicFileName=`echo $mp3file | sed 's/\.mp3/\.ogg/g;'`
> >     TmpMusicFileName=`echo $mp3file | sed 's/\.mp3/\.ogg/g;'`
> >     mpg123 -w - "$mp3file" | oggenc - -o $NewMusicFileName
> >   fi
> >  done
> >
> >
> > GNOME (specifically, Nautilus) states that
> > NAUTILUS_SCRIPT_SELECTED_FILE_PATHS is a newline-delimited list of paths for
> > the selected files int he window.  However, it seems that bash, when using a
> > for loop on the environment variable, do not break it apart by lines, but
> > instead by word.  Is there a way that anyone knows to take the environment
> > variable, and use each whole line of it within a for-style loop like this?
> >
> > The output that I am getting from this script at this time is:
> >
> > fd0man at pepper:~/Downloads$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS='/home/fd0man/Downloads/51 - Shakira - Hips dont lie ft Wyclef Jean.mp3' ogg_convert_test
> > Processing file "/home/fd0man/Downloads/51?
> > Processing file -?
> >
> >
> > Where it hangs on the second line until I press C-c or C-d.  If I press
> > C-d, it proceeds to go through the rest of the parts of the file name.
> > *shrugs*  It would be nice if there were a for variant that worked on lines
> > instead of words, but if there is, the man page isn't telling me about it?
> >
> >     ? Mike
> >
> > --
> >   The fd0man??The Magical Floppy Man! (fd0man at gmail.com) *"One world,
> > one web, one program"  ?Microsoft promotional ad *
> > *"**Ein** Volk, **ein** Reich, **ein** Fuehrer"  ?Adolf Hitler *
> >
> > _______________________________________________
> > Ale mailing list
> > Ale at ale.org
> > http://www.ale.org/mailman/listinfo/ale
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...




More information about the Ale mailing list