Julien Biard
1/22/2009 9:24:00 AM
Nobuyoshi Nakada wrote:
> Hi,
>
> At Thu, 22 Jan 2009 16:58:47 +0900,
> Julien Biard wrote in [ruby-talk:325582]:
>> I would like to execute call system on a filename with a backquote (`),
>> but I don't know how to escape it.
>
> Escaping depends on platforms.
>
>> -> ls "[Shawn Lee]/10. Shawn Lee\`s Ping Pong Orchestra - Bollywood.mp3"
>> -rw-r--r-- 1 hobs medias 3,0M 2009-01-18 15:16 [Shawn Lee]/10. Shawn
>> Lee`s Ping Pong Orchestra - Bollywood.mp3
>>
>>>> s = "[Shawn Lee]/10. Shawn Lee`s Ping Pong Orchestra - Bollywood.mp3"
>> => "[Shawn Lee]/10. Shawn Lee`s Ping Pong Orchestra - Bollywood.mp3"
>
> In 1.8.7 or later, Shellwords.escape exists.
>
> require 'shellwords'
> `ls #{Shellwords.escape(s)}`
I am using 1.8.6.
>
> Or, multiple arugment #exec bypasses shell.
>
> IO.popen("-") {|f| f or exec("ls", s); f.read}
Thanks, it works.
>
> In 1.9, IO.popen can handle an array argument.
>
> IO.popen(["ls", s], &:read)
>