代码之家  ›  专栏  ›  技术社区  ›  William Entriken

Ruby中正确转义shell参数

  •  1
  • William Entriken  · 技术社区  · 9 年前

    代码如下:

    desc "Find 301 errors on production servers"
    task :find301 do
      command = "grep 'HTTP/1.1\" 301' /var/log/httpd/*ssl-access.log | grep -v 'gclid' | awk '{print \$7}' | sort | uniq -c | sort -nr"
    
      production_servers.each do |server|
        sh "ssh root@#{server} #{command}"
      end
    end
    

    是否有更好的方法来转义shell命令,最好是以允许 sh "ssh root@#{server} #{command}" 用于任意 command s

    2 回复  |  直到 9 年前
        1
  •  5
  •   the Tin Man    9 年前

    使用 require 'shellwords' Shellwords.escape 您可以在“”中找到有关这些的更多信息 shellescape “和” Shellwords "

        2
  •  0
  •   snowe    9 年前

    您可以使用 %q %Q 版本,但仍需要指定分隔符。

    %Q|these don't need to be escaped /\"'"'{}[]-_+=()!@#$%^&*`~;:<>.,|