Ключ --dump-po-strings в Bash напоминает ключ -D, но выводит строки в формате "po", с помощью утилиты gettext.
Теперь построим файл language.po, для каждого языка, на которые предполагается перевести сообщения сценария. Например:
Файл ru.po сделан переводчиком, в оригинальном документе локализация выполнена на примере французского языка
ru.po:
#: a:6
msgid "Can't cd to %s."
msgstr "Невозможно перейти в каталог %s."
#: a:7
msgid "Enter the value: "
msgstr "Введите число: "
Затем запустите msgfmt.
msgfmt -o localized.sh.mo ru.po
Перепишите получившийся файл localized.sh.mo в каталог /usr/share/locale/ru/LC_MESSAGES и добавьте в начало сценария строки:
TEXTDOMAINDIR=/usr/share/locale
TEXTDOMAIN=localized.sh
Если система корректно настроена на русскую локаль, то пользователь, запустивший сценарий, будет видеть сообщения на русском языке.
#!/bin/bash
# localized.sh
E_CDERROR=65
error() {
local format=$1
shift
printf "$(gettext -s "$format")" "$@" >&2
exit $E_CDERROR
}
cd $var || error "Can't cd to %s." "$var"
read -p "$(gettext -s "Enter the value: ")" var
# ...
А переменные TEXTDOMAIN и TEXTDOMAINDIR, необходимо будет экспортировать в окружение.
---
Автор этого приложения: Stephane Chazelas.
Приложение F. История команд
Командная оболочка Bash предоставляет в распоряжение пользователя инструментарий командной строки, позволяющий управлять
История команд Bash:
1. history
2. fc
bash$ history
1 mount /mnt/cdrom
2 cd /mnt/cdrom
3 ls
...
Внутренние переменные Bash, связанные с историей команд:
1. $HISTCMD
2. $HISTCONTROL
3. $HISTIGNORE
4. $HISTFILE
5. $HISTFILESIZE
6. $HISTSIZE
7. !!
8. !$
9. !#
10. !N
11. !-N
12. !STRING
13. !?STRING?
14. ^STRING^string^
К сожалению, инструменты истории команд, в Bash, совершенно бесполезны в сценариях.
#!/bin/bash
# history.sh
# Попытка воспользоваться 'историей' команд в сценарии.
history
# На экран ничего не выводится.
# История команд не работает в сценариях.
bash$ ./history.sh
(ничего не выводится)
Приложение G. Пример файла .bashrc
Файл ~/.bashrc определяет поведение командной оболочки. Внимательное изучение этого примера поможет вам значительно продвинуться в понимании Bash.
Emmanuel Rouat представил следующий, очень сложный, файл .bashrc, написанный для операционной системы Linux. Предложения и замечания приветствуются.
Внимательно изучите этот файл. Отдельные участки этого файла вы свободно можете использовать в своем собственном .bashrc или, даже в своих сценариях!
Пример G-1. Пример файла .bashrc
#===============================================================
#
# ЛИЧНЫЙ ФАЙЛ $HOME/.bashrc для bash-2.05a (или выше)
#
# Время последней модификации: Втр Апр 15 20:32:34 CEST 2003
#
# Этот файл содержит настройки интерактивной командной оболочки.
# Здесь размещены определения псевдонимов, функций
# и других элементов Bash, таких как prompt (приглашение к вводу).
#
# Изначально, этот файл был создан в операционной системе Solaris,
# но позднее был переделан под Redhat
# --> Модифицирован под Linux.
# Большая часть кода, который находится здесь, была взята из
# Usenet (или Интернет).
# Этот файл содержит слишком много определений -- помните, это всего лишь пример.
#
#
#===============================================================
# --> Комментарии, добавленные автором HOWTO.
# --> И дополнены автором сценария Emmanuel Rouat :-)
#-----------------------------------
# Глобальные определения
#-----------------------------------
if [ -f /etc/bashrc ]; then
. /etc/bashrc # --> Прочитать настройки из /etc/bashrc, если таковой имеется.
fi
#-------------------------------------------------------------
# Настройка переменной $DISPLAY (если еще не установлена)
# Это срабатывает под linux - в вашем случае все может быть по другому....
# Проблема в том, что различные типы терминалов
# дают разные ответы на запрос 'who am i'......
# я не нашел 'универсального' метода
#-------------------------------------------------------------
function get_xserver ()
{
case $TERM in
xterm )
XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )
XSERVER=${XSERVER%%:*}
;;
aterm | rxvt)
# добавьте здесь свой код.....
;;
esac
}
if [ -z ${DISPLAY:=""} ]; then
get_xserver
if [[ -z ${XSERVER} || ${XSERVER} == $(hostname) || ${XSERVER} == "unix" ]]; then
DISPLAY=":0.0" # для локального хоста
else
DISPLAY=${XSERVER}:0.0 # для удаленного хоста
fi
fi
export DISPLAY
#---------------
# Некоторые настройки
#---------------
ulimit -S -c 0 # Запрет на создание файлов coredump
set -o notify
set -o noclobber
set -o ignoreeof
set -o nounset
#set -o xtrace # полезно для отладки
# Разрешающие настройки:
shopt -s cdspell
shopt -s cdable_vars
shopt -s checkhash
shopt -s checkwinsize