Возился с локалью, чтобы недели начинались с понедельника

Ваша работа была бы намного проще, если бы вы просто создали сценарий в другой системе, который делал то, что вы хотели, а затем вызвали этот сценарий без каких-либо параметров. Альтернативой является создание сценария на другой стороне, который показывает, какие параметры он получает, что-то вроде echo _args.sh:

#!/bin/ksh

echo "$0 $@"
ARG=1
while [ $# -gt 0 ]
do
  echo "$ARG: $1"
  shift
  (( ARG++ ))
done

Тогда вы можете позвонить:

ssh tomcat@rmgdmzwebapp02.dmz.local bin/echo_args.sh  -f -u \'INFORMATION \\[main\\] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler \\[\\\"ajp-nio-8009\\\"\\]\' /opt/tomcat/logs/catalina.out

и вы получите:

bin/echo_args.sh -f -u INFORMATION \[main\] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler \[\"ajp-nio-8009\"\] /opt/tomcat/logs/catalina.out
1: -f
2: -u
3: INFORMATION \[main\] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler \[\"ajp-nio-8009\"\]
4: /opt/tomcat/logs/catalina.out

, который показывает, что параметры правильно поступают на другую сторону. Теперь вы просто заменяете echo _args.sh своей розничной программой:

ssh sshuser@my-server.net.bar /bin/retail -f -u \'INFORMATION \\[main\\] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler \\[\\\"ajp-nio-8009\\\"\\]\' /opt/tomcat/logs/catalina.out
1
03.10.2019, 13:30
1 ответ

Есть как минимум три варианта:

  1. создайте новую локаль из C.UTF -8 и просто измените это первое _значение дня недели. Назовем это X.UTF -8. В Debian это должно работать, если у вас есть права доступа к этим каталогам:
    cp -R /usr/lib/locale/C.UTF-8 /usr/lib/locale/X.UTF-8
    cat /usr/share/i18n/locales/C | sed 's/first_weekday 1/first_weekday 2/g' | localedef --add-to-archive /usr/lib/locale/X.UTF-8 -i -
    LC_TIME=X.UTF-8 locale first_weekday

Итак, вы копируете существующее определение, просто ленивый способ воссоздать структуру папок, затем из исходного C.UTF -8 (имя просто "C" )вы меняете строку, которую хотите изменить (можно было бы и короче, но так читабельнее ).

  1. измените это значение в существующей локали C.UTF -8:
    cat /usr/share/i18n/locales/C | sed 's/first_weekday 1/first_weekday 2/g' | localedef --add-to-archive /usr/lib/locale/C.UTF-8 -i -
    LC_TIME=C.UTF-8 locale first_weekday
  1. Хорошо, если вы согласны с другими различиями между en _GB и C.UTF -8, то эти шаги должны внести изменения:

В зависимости от вашей системы не все языки доступны сразу. Итак, во-первых, убедитесь, что у вас есть _GB.UTF -8 доступных (, иначе вы получите сообщение об ошибке «Невозможно установить LC _ALL на язык по умолчанию»):

locale -a

если нет, то добавьте. Поскольку нет информации о вашей системе, я не могу сказать вам, как это сделать. В Debian/Ubuntu вы можете выполнитьdpkg-reconfigure locales(или отредактировать /etc/locale.gen, чтобы добавить локаль, или, скорее всего, просто раскомментировать ее, а затем запуститьlocale-gen).

Как только en _GB.UTF -8 появится в списке доступных локалей, вы можете установить:

LC _TIME=en _GB.UTF -8

LC_TIME=en_GB.UTF-8 locale first_weekday

должно вернуть 2

В этом документе Debian содержится дополнительная информация о том, как сделать изменение постоянным для различных сред.

1
28.04.2021, 23:28

Теги

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