Использование команды сценария для сценария установки в AIX

Файл в неизвестной 8-битной кодовой странице определяется как «unknown-8bit» по какой-то причине: это непростая проблема без каких-либо представлений о язык. Не сказать, что это невозможно, но для эффективной работы такой эвристический детектор должен был обладать большим словарным запасом всех наиболее часто используемых языков, большим списком кодовых страниц и некоторой грамматикой. Обновление: никогда не пробовал enca ; возможно, это чудо-декодер, сделанный в этом роде. Но если файл представляет собой, скажем, исходный код в основном ASCII с одним или двумя словами, состоящими из октетов с высоким битом, то практически невозможно угадать язык и кодировку даже с помощью такого чудесного эвристического алгоритма. Вот почему исходный HTTP / 1.1 настоятельно настаивал на объявлении кодировки в заголовке HTTP Content-Type: для любого типа носителя text / *.

Итак, решение по пунктам:

  1. Исследовать / изучить / угадать, на каком языке предположительно кодируется файл. Здесь решающее значение имеет человеческий интеллект. По крайней мере, составьте список из нескольких правдоподобных гипотез.
  2. Составьте список кодировок, используемых языком (ами).
  3. Попробуйте эти кодировки: head file | iconv -f try (предполагается, что переменная среды LANG установлена ​​в соответствии с используемым TUI) и посмотрите, получится ли результат читабельно, до успеха.

Это решение, конечно, предполагает, что текст закодирован правильно , но в неизвестной кодовой странице. Случаи, когда текст был искажен по ошибке человека или из-за сбоя программного обеспечения, не могут быть решены таким образом.

Пункты 2 и 3 могут быть автоматизированы, и такие инструменты действительно существуют, но они зависят от языка (т.е. эвристический декодер для русского языка не будет работать для японского и наоборот) или, по крайней мере, , требуется указать язык ввода (как это делает enca ).

Что касается персидского языка, возможные кодировки включают Windows-1256 (см. этот поток ), ISO8859-6 и теперь устаревшую иранскую кодировку системы . Будьте счастливы, что у вас нет списка хотя бы из семи кодовых страниц, используемых для русского языка (KOI7, KOI8, CP866, Windows-1251, ISO8859-5, MacCyrillic, MIK).

3
15.03.2018, 15:09
1 ответ

Вы можете улучшить скрипт-оболочку для определения ОС; если он работает в Linux, выполните script -c..., но если он работает в AIX, дайте оболочке сценария -переопределенный профиль, который запускает только ваш установщик, а затем завершает работу:

$ cat myinstaller.ksh
#!/usr/bin/ksh

case $(uname -s) in
  (Linux)
        script -c myrealinstaller.ksh /var/log/myinstaller.log
        ;;
  (AIX)
        printf "ENV=./myrealinstaller.ksh\nexit\n" >./installer.profile
        trap 'rm -f./installer.profile' INT
        ENV=./installer.profile script -q./var/log/myinstaller.log
        rm./installer.profile
        ;;
esac

Я изменил пути к скрипту и журналам, чтобы протестировать его локально. Другими вовлеченными факторами являются:

  • установка ENVдля указания на переопределенный профиль, как мы вызываемscript
  • вызов scriptс помощью -q, чтобы немного успокоиться
  • важно, сброс ENV во время вызова реального установщика, чтобы не зацикливаться бесконечно
  • указание переопределенному профилю закрыться, как только программа установки завершит работу

С образцом myrealinstaller.ksh из:

#!/bin/ksh
echo Hi, I am the real installer

Содержимое./var/log/myinstaller.log:

Script command is started on Thu Mar 15 09:34:04 2018.
Hi, I am the real installer


Script command is complete on Thu Mar 15 09:34:04 2018.
1
27.01.2020, 21:30

Теги

Похожие вопросы