Re: Bash / Escaping quotes is driving me crazy . .

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

 



Gordon,


Date: Sat, 20 Feb 2016 16:40:01 -0800
From: Gordon Messmer <gordon.messmer@xxxxxxxxx>
To: Community support for Fedora users <users@xxxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: Bash / Escaping quotes is driving me crazy . .
Message-ID: <56C90761.4070509@xxxxxxxxx>
Content-Type: text/plain; charset=utf-8; format=flowed

On 02/20/2016 04:05 PM, Philip Rhoades wrote:
. . but why is there only a problem with the "flac" OR? - all three
files have at least one space in the filename:

Your mistake seems to be believing that the shell can understand the way
you're nesting quotes.  It can't.  Each unescaped quote you're using
simply terminates the quoted string that preceded it.  So your example:

   ssh localhost "find
/home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
-maxdepth 1 -type f \\( -name "*.mp3" -o -name "*.m4a" -o -name "*.flac"
\\)"

There are the following quoted strings:

"find /home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
-maxdepth 1 -type f \\( -name "
" -o -name "
" -o -name "
" \\)"

This means two things: First, the wildcards are unquoted when the
command is run on the remote system.  Second, the wildcards are also
unquoted on the local system.  So, if there are any mp3, m4a, or flac
files in the directory where you run that command, or in the default
login directory on the remote system, the wildcard will be expanded and
find will only search for files with that specific name.

Instead, use single quotes around the entire command, or escape both the
quotes and the wildcards.

   ssh localhost "find
/home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
-maxdepth 1 -type f \\( -name \"\*.mp3\" -o -name \"\*.m4a\" -o -name
\"\*.flac\" \\)"

   ssh localhost 'find
/home/phil/music/ambient/RobertGass+OnWingsOfSong/OmNamahaShivaya
-maxdepth 1 -type f \( -name "*.mp3" -o -name "*.m4a" -o -name "*.flac" \)'


OK, that all makes sense but there is a further issue - I was trying to keep it simple - this whole line is inside a Ruby "system" command ie:

  system( "ssh .. " )

- so my working version is the same as your first option (without the escaped '*'s) but with an extra '\' at each place. I can't use the second option because I need to use double quotes so that I can use Ruby variables inside the double quotes eg:

  #{path}

Thanks for the explanation!

Regards,

Phil.
--
Philip Rhoades

PO Box 896
Cowra  NSW  2794
Australia
E-mail:  phil@xxxxxxxxxxxxx
--
users mailing list
users@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
Have a question? Ask away: http://ask.fedoraproject.org



[Index of Archives]     [Older Fedora Users]     [Fedora Announce]     [Fedora Package Announce]     [EPEL Announce]     [EPEL Devel]     [Fedora Magazine]     [Fedora Summer Coding]     [Fedora Laptop]     [Fedora Cloud]     [Fedora Advisory Board]     [Fedora Education]     [Fedora Security]     [Fedora Scitech]     [Fedora Robotics]     [Fedora Infrastructure]     [Fedora Websites]     [Anaconda Devel]     [Fedora Devel Java]     [Fedora Desktop]     [Fedora Fonts]     [Fedora Marketing]     [Fedora Management Tools]     [Fedora Mentors]     [Fedora Package Review]     [Fedora R Devel]     [Fedora PHP Devel]     [Kickstart]     [Fedora Music]     [Fedora Packaging]     [Fedora SELinux]     [Fedora Legal]     [Fedora Kernel]     [Fedora OCaml]     [Coolkey]     [Virtualization Tools]     [ET Management Tools]     [Yum Users]     [Yosemite News]     [Gnome Users]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [Fedora Sparc]     [Libvirt Users]     [Fedora ARM]

  Powered by Linux