Я могу решить, по крайней мере, часть проблемы: почему stop
часть не работает. Экспериментально, когда Вы запускаете Экранную сессию в отдельном режиме (screen -d -m
), никакое окно не выбрано, таким образом, вводит позже отправленный с screen -X stuff
просто потерян. Необходимо явно указать, что Вы хотите отправить нажатия клавиш в окно 0 (-p 0
). Это - хорошая идея так или иначе, в случае, если Вы, оказывается, создаете другие окна на той Экранной сессии по любой причине.
screen -S minecraft -p 0 -X stuff "stop^M"
(Экран переводит ^M
управлять-M, который является символом, отправленным клавишей Enter.)
Проблема с запуском сессии из сценария, вероятно, связана с unMENU.
Я повторно сформулировал Ваши вопросы немного по причинам, которые должны казаться очевидными, когда Вы читаете их в последовательности.
Нет, это не возможно: как Вы упоминаете в своем вопросе, имя файла UNIX является просто последовательностью байтов; ядро ничего не знает о кодировании, который полностью пространство пользователя (т.е. прикладной уровень) понятие.
Другими словами, ядро ничего не знает о LANG
/LC_*
, таким образом, это не может перевести.
У Вас может быть несколько записей каталога, относящихся к тому же файлу; можно сделать это через жесткие ссылки или символьные ссылки.
Знайте, однако, что имена файлов, которые не допустимы в текущем кодировании (например, Ваша символьная строка GBK, когда Вы работаете в локали UTF-8) отобразятся плохо, если вообще.
Вы не можете исправить ядро, чтобы сделать это (см. 1.), но Вы могли - в теории - исправляют библиотеку C (например, glibc), чтобы выполнить этот перевод и всегда преобразовывать имена файлов в UTF-8, когда это называет ядро, и преобразуйте их назад в текущее кодирование, когда это читает имя файла из ядра.
Более простой подход мог быть должен записать файловую систему наложения с FUSE, который просто перенаправляет любой запрос к файловой системе к другому местоположению после преобразования имени файла к/от UTF-8. Идеально Вы могли смонтировать эту файловую систему в ~/trans
, и когда доступ сделан ~/trans/a/GBK/encoded/path
затем файловая система FUSE действительно доступы /a/UTF-8/encoded/path
.
Однако проблема с этими подходами: что Вы делаете с файлами, которые уже существуют в Вашей файловой системе и не являются закодированным UTF-8? Вы не можете просто передать их непереведенный, потому что затем Вы не знаете, как преобразовать их; Вы не можете исказить их путем перевода последовательностей недопустимого символа в ?
потому что это могло создать конфликты...
То, что можно сделать, ограничить сумму поддерживаемых локалей только к локалям UTF-8.
http://www.fifi.org/cgi-bin/man2html/usr/share/man/man5/locale.gen.5
Выбор кодовой страницы OEM не работает как в vanilla unzip, так и в vanilla p7zip. Я сделал патчи , устраняющие эту проблему, и есть ppa для Ubuntu с p7zip с этим патчем.
Эта проблема с zip-файлами была исправлена в самой последней диспетчере файлов и архивов far2l . Чтобы определение устаревшей кодировки zip с помощью far2l работало правильно, языковые настройки вашей системы должны совпадать с теми, которые установлены в системе, в которой был создан архив (. Внутренний инструмент Windows для работы с папками zip использует точно такую же логику ). Также вы можете сделать
LANG=zh_CN.UTF-8 far2l