Это прекрасно работает в Ruby, и должно работать:
puts 'don\'t'
Но я хочу запустить то же самое в BASH с Ruby:
%x(echo 'don\'t')
Я получаю эту ошибку: sh: -c: line 0: unexpected EOF while looking for matching
'' `
Та же ошибка возникает с` `, system()
, Open3
Мой фактический фрагмент кода:
require 'open3'
module XdoTool
BIN = 'xdotool'
EXEC = ::ENV['PATH'].split(::File::PATH_SEPARATOR).map { |path| ::File.join(path, BIN) if ::File.executable?(::File.join(path, BIN)) }.compact.last
raise RuntimeError, "No #{BIN} found in the exported paths. Please make sure you have #{BIN} installed" unless EXEC
class << self
def type(str)
Open3.capture2("#{EXEC} type --delay 0 '#{str = str.gsub("'", '\'')}'")
str
end
end
end
# Types the quoted text anywhere.
XdoTool.type("What is the reason of the error?")
# sh: -c: line 0: unexpected EOF while looking for matching `''
# sh: -c: line 1: syntax error: unexpected end of file
XdoTool.type("What's the reason of the error?")
Обратите внимание, что на улице может быть что угодно.Он может содержать буквенно-цифровые символы, символы, смайлики или комбинации всех этих вещей.Как я могу обойти проблему с кавычками здесь?