Re: Bash file to variable string problem -- must be simple. What am I missing?
On Sat 02 Mar 2019 at 21:48:26 (-0500), deb wrote:
> On 3/2/19 8:07 PM, Roberto C. Sánchez wrote:
> > On Sat, Mar 02, 2019 at 07:56:58PM -0500, deb wrote:
> > > This has to be simple and I'm just missing it.
> > >
> > > If I pull a filename from a temp file into a variable, I can ls it fine.
> > >
> > > If I cut off the extension, and tack on my own SAME EXT, ls no longer
> > > works.
> > >
> > > (The actual script is more elaborate, loading vlc , etc -- but this
> > > summarizes & shows my issue)
> > >
> > > # mp4file.txt holds just 'long file with spaces.mp4'
> > >
> > > fname=$(<mp4file.txt)
> > >
> > > # echo $fname shows the right filename.mp4 string
> > >
> > > # works
> > > ls -al "$fname"
> > >
> > > # Cut off the extension.
> > > fname=`echo $fname | rev | cut -d. -f2 | rev`
> > >
> > > # echo $fname shows the filename sans '.mp4'
> > >
> > > # THIS LS FAILS, WITH FILE NOT FOUND (but actually reports the exact
> > > string that worked above, but not being found here).
> > >
> > > ls -al "$fname".mp4
> > >
> > > ls: cannot access 'long file with spaces.mp4': No such file or directory
> > >
> > I cannot replicate the behavior you describe. Here is how it looks for
> > me:
> >
> > root@chroot:~# touch "long file with spaces.mp4"
> > root@chroot:~# echo "long file with spaces.mp4" >mp4file.txt
> > root@chroot:~# cat mp4file.txt
> > long file with spaces.mp4
> > root@chroot:~# ls -l
> > total 4
> > -rw-r--r-- 1 root root 0 Mar 3 01:02 long file with spaces.mp4
> > -rw-r--r-- 1 root root 26 Mar 3 01:02 mp4file.txt
> > root@chroot:~# fname=$(<mp4file.txt)
> > root@chroot:~# ls -al "$fname"
> > -rw-r--r-- 1 root root 0 Mar 3 01:02 long file with spaces.mp4
> > root@chroot:~# fname=`echo $fname | rev | cut -d. -f2 | rev`
> > root@chroot:~# ls -al "$fname".mp4
> > -rw-r--r-- 1 root root 0 Mar 3 01:02 long file with spaces.mp4
> >
> > What version of bash are you using?
> >
> > > ------------------------------------------------------
> > >
> > > It is not:
> > >
> > > * a special character thing,
> > >
> > > * a carriage return thing,
> > >
> > > * a character case thing,
> > >
> > > * not helped with './' or '~/' added in front of the filename.
> > >
> > > * It's the same string in both spots.
> > >
> > > Any thoughts folks?
> > >
> > I am not sure about the overall problem, but I can say I would replace
> > this:
> >
> > fname=`echo $fname | rev | cut -d. -f2 | rev`
> >
> > with this:
> >
> > fname=$(basename "$fname" .mp4)
> >
> > Regards,
> >
> > -Roberto
> >
> *
> *
>
> *Thank you Roberto.*
>
>
> # Cut off the extension.
> # fname=`echo $fname | rev | cut -d. -f2 | rev`
>
> fname=$(basename "$fname" .mp4)
>
> ^ this does work for the *ls*, but I do not know that it will be a .mp4.
>
>
> (It could be a .mkv, .webm, .ogg, .mp4, etc.)
>
> What is certain is the filename to the left of the final '.'.
>
> So I was building up the different choices to file test for, hence the
> fname=`echo $fname | rev | cut -d. -f2 | rev`
>
> I'm running:
>
> cat /etc/issue
> 9.8
>
> bash --version
> GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Let's see:
wren!david 22:48:49 /tmp $ fname=$(<mp4file.txt)
wren!david 22:48:59 /tmp $ ls -la "$fname"
-rw-r----- 1 david david 0 Mar 2 22:48 long file with spaces.mp4
wren!david 22:49:10 /tmp $ fname=`echo $fname | rev | cut -d. -f2 | rev`
wren!david 22:49:23 /tmp $ ls -la "$fname".mp4
ls: cannot access 'long file with spaces.mp4': No such file or directory
2 wren!david 22:49:35 /tmp $
Here are the preceding two lines:
wren!david 22:48:23 /tmp $ touch ' long file with spaces.mp4'
wren!david 22:48:25 /tmp $ echo ' long file with spaces.mp4' > mp4file.txt
I notice that you haven't actually pasted your own session in the OP,
so we don't really know what strings you were manipulating.
Cheers,
David.
Reply to: