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.