Re: Bash file to variable string problem -- must be simple. What am I missing?
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
--
Roberto C. Sánchez
Reply to: