# Sanitize string for shell commands - http://stackoverflow.com/q/33905127/5290909
String.class_eval do
def sanitizeshell()
# Escape every character except letters and shell special chars
self.gsub!(/[^\s"-*,-<>-~\u00FF]/, '\\\\\0')
end
def escapenonascii()
# Escape every character outside the ASCII range
self.gsub!(/[[:^ascii:]]/, '\\\\\0')
end
end
# Test it
str = "(dir *.txt & dir *Sè\u00E1ñ*.rb) | sort /R >Filé.txt 2>&1"
puts 'String:'
puts str
puts "\nSanitized:"
puts str.sanitizeshell
IyBTYW5pdGl6ZSBzdHJpbmcgZm9yIHNoZWxsIGNvbW1hbmRzIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMzM5MDUxMjcvNTI5MDkwOQoKU3RyaW5nLmNsYXNzX2V2YWwgZG8KICAgIGRlZiBzYW5pdGl6ZXNoZWxsKCkKICAgICAgICAjIEVzY2FwZSBldmVyeSBjaGFyYWN0ZXIgZXhjZXB0IGxldHRlcnMgYW5kIHNoZWxsIHNwZWNpYWwgY2hhcnMKICAgICAgICBzZWxmLmdzdWIhKC9bXlxzIi0qLC08Pi1+XHUwMEZGXS8sICdcXFxcXDAnKQogICAgZW5kCiAgICBkZWYgZXNjYXBlbm9uYXNjaWkoKQogICAgICAgICMgRXNjYXBlIGV2ZXJ5IGNoYXJhY3RlciBvdXRzaWRlIHRoZSBBU0NJSSByYW5nZQogICAgICAgIHNlbGYuZ3N1YiEoL1tbOl5hc2NpaTpdXS8sICdcXFxcXDAnKQogICAgZW5kCmVuZAoKCgojIFRlc3QgaXQKc3RyID0gIihkaXIgKi50eHQgJiBkaXIgKlPDqFx1MDBFMcOxKi5yYikgfCBzb3J0IC9SID5GaWzDqS50eHQgMj4mMSIKcHV0cyAnU3RyaW5nOicKcHV0cyBzdHIKCnB1dHMgIlxuU2FuaXRpemVkOiIKcHV0cyBzdHIuc2FuaXRpemVzaGVsbA==