[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [SOLVED] Re: Shell Script Help



On Mon, 6 May 2019 15:16:09 -0500
David Wright <deblis@lionunicorn.co.uk> wrote:

> On Mon 06 May 2019 at 10:56:47 (-0700), Patrick Bartek wrote:
> > On Mon, 6 May 2019 13:08:05 -0400 Greg Wooledge <wooledg@eeg.ccf.org> wrote:  
> > > On Mon, May 06, 2019 at 09:41:58AM -0700, Patrick Bartek wrote:  
> > > > On Mon, 6 May 2019 10:24:24 -0400 Greg Wooledge <wooledg@eeg.ccf.org> wrote:    
> > > > > for dir in ab*/; do
> > > > >     name=${dir%/}
> > > > >     enfuse --output "$name.jpg" --compression=97 "$dir"/*.jpg
> > > > > done    
> > > > 
> > > > Typed in as a single line with a semi-colon at end of enfuse command
> > > > and before done to keep it from locking up, generates error "enfuse:
> > > > failed to open "ab*//*.jpg: No such file or directory. But it's a
> > > > beginning. Time to pull out my 400 page Unix shell programming book.    
> > > 
> > > Most likely it means there weren't any matching directories wherever
> > > you ran it.  The ab*/ glob will be used literally if it doesn't match
> > > any directories.
> > > 
> > > If you want to check for that, you can add a test.
> > > 
> > > for dir in ab*/; do
> > >     test -d "$dir" || continue
> > >     name=${dir%/}
> > >     enfuse --output "$name.jpg" --compression=97 "$dir"/*.jpg
> > > done
> > > 
> > > You said you had twenty-something directories named ab01, ab02, etc.
> > > So it should have matched unless you ran it from the wrong place,
> > > or unless you lied about your directory names.
> > > 
> > > But nobody would EVER lie about their directory names in a shell
> > > programming question.  Oh, no, never.  
> > 
> > Silly me.  I failed to substitute the correct dir name letters in the
> > script for example "ab" prefix I origninaly posted. Didn"t even notice
> > until I started troubleshooting 3 hours later. That's what I get for
> > reading the list a 6:00am. With semi-colons properly placed for a one
> > liner, it works.  
> 
> You don't really need to place semicolons anywhere for a one-liner;
> the system does it for you. I've cut and pasted Greg's example into
> the command line, and then pressed Uparrow (for history recall):
> 
> $ for dir in ab*/; do
> >     name=${dir%/}
> >     enfuse --output "$name.jpg" --compression=97 "$dir"/*.jpg
> > done  
> bash: enfuse: command not found
> $ for dir in ab*/; do     name=${dir%/};     enfuse --output "$name.jpg" --compression=97 "$dir"/*.jpg; done
> 
> and there's your one-liner.

I come from a time when "The System" did nothing for you.  If you
missed a period or semi-colon, etc. execution stopped and, if you were
lucky, you got a cryptic error code number with no other explanation.
Hell, my Unix shell programming book is almost 30 years old! And it's
one of the newer ones. ;-)

But thanks for the info anyway.

B


Reply to: