如何在Ruby中为终端转义字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我试图启动mplayer。我的文件名包含空格,这些应该被转义。这是我正在使用的代码:

@player_pid = fork do
   exec "/usr/bin/mplayer #{song.file}"
end

其中#{song.file}包含一条路径"/home/example/music/01 - a song.mp3"。我怎样才能正确地转义这个变量(以及标题可能包含的其他可能的奇怪字符),使得终端会接受我的命令?

提问于
用户回答回答于

Shellwords应该可以

exec "/usr/bin/mplayer %s" % Shellwords.escape(song.file)

在Ruby 1.9.x中,你得先:

require "shellwords"

但在Ruby 2.0.x中,不必明确要求。

用户回答回答于

请不要使用“单一命令行”形式,这会打开所有常见的引用和注入问题,并毫无意义地启动一个shell。

不要使用引用和转义,也不要使用无壳的:

exec '/usr/bin/mplayer', song.file

扫码关注云+社区