В каждом из ваших примеров вы выполняете команду оболочки.В качестве первого шага я хотел бы убедиться, что ваша команда оболочки выполняется так, как вы ожидаете, когда вы вводите ее напрямую:
touch мистика
cat мистика
cat < мистика
Если вы получаете ошибки в оболочке, это одна из двух возможностей.: команда shell не понимает кодировку символов, или имя файла требует кавычек, чтобы правильно его различить.
Ruby 1.9 понимает кодировки набора символов, чего не понимал Ruby 1.8.Вам нужно будет провести небольшое исследование, чтобы определить, какую кодировку символов использует ваша оболочка.После этого вы создадите команды в виде обычных строк:
touch = "touch #{s}".force_encoding("UTF-8") ## or whatever encoding you need
, а затем выполните команду:
`#{touch}`
Я считаю, что кодировка Ruby 1.9 по умолчанию - UTF-8,Ruby 1.8 не имеет понятия кодирования, а строка представляет собой просто массив байтов.К сожалению, не каждая часть программного обеспечения понимает Unicode или концепции кодирования символов (так же, как Ruby 1.8).В этих случаях система будет использовать любую кодировку по умолчанию.Я подозреваю, что ваша оболочка может быть одной из таких программ.