Я нашел ответ :Мне нужно было изменить последнюю строку служебного файла на:
WantedBy=postgresql.service
Таким образом, всякий раз, когда запускается Postgres, моя служба тоже запускается -, но если моя служба дает сбой, это не останавливает Postgres.
Директивы в секции [Install]
влияют только на включение и отключение устройств. Но все было не так просто, когда мой сервис уже был включен:
# systemctl enable tabill.service
Failed to execute operation: Too many levels of symbolic links
Сообщение об ошибке вводило в заблуждение. Исправить это было просто:
# systemctl disable tabill.service
Removed symlink /etc/systemd/system/tabill.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/tabill.service.
# systemctl enable tabill.service
Failed to execute operation: No such file or directory
# systemctl enable /srv/tabill/tabill.service
Created symlink from /etc/systemd/system/postgresql.service.wants/tabill.service to /srv/tabill/tabill.service.
Created symlink from /etc/systemd/system/tabill.service to /srv/tabill/tabill.service.
Теперь моя служба останавливается и запускается всякий раз, когда это делает Postgres. И естественно Postgres запускается при загрузке системы.
Если это сценарий оболочки zsh
, вы можете использовать специальный ассоциативный массив $langinfo
в модуле zsh/langinfo
:
zmodload zsh/langinfo
radix=$langinfo[RADIXCHAR]
(, который соответствует стандарту nl_langinfo(RADIXCHAR)
, подробности см. в man nl_langinfo
вашей системы; $langinfo[THOUSEP]
для разделителя тысяч ).
В скрипте bash
(также будет работать в zsh
), вы сможете получить его без разветвления отдельного процесса с помощью встроенной printf
:
printf -v radix %.1f 1 && radix=${radix:1:1}
Чтобы преобразовать число из формата локали пользователя в формат локали C, с оболочкой ksh93, вы можете сделать это следующим образом:
$ locale title
German locale for Germany
$ x=1.123.456,78 ksh -c 'typeset -F x="$x"; LC_ALL=C; printf "%.23g\n" "$x"'
1123456.78