База данных часовых поясов, используемая всеми, поддерживается IANA . Они уже обновили свою базу данных . Лучшее решение для вас - обновить вашу систему; большинство дистрибутивов должны предоставлять обновленный пакет при изменении базы данных часовых поясов.
Если по какой-то причине вы не можете легко обновить свою систему, чтобы установить последнюю версию базы данных часовых поясов, вы можете объявить часовой пояс с помощью переменной среды TZ
, которая имеет преимущество в том, что не требуется никакой установки, но недостаток в том, что он требует явной настройки, поэтому он не поможет приложениям, которые работают в нескольких часовых поясах.
export TZ='EST+5'
В системе с Glibc (то есть без встроенного Linux) альтернативой является получение последней базы данных часовых поясов и установка TZ
на : / path / to / zoneinfo / American / Cayman
(т.е. путь к файлу с двоеточием в начале). Преимущество этого заключается в том, что вы будете знать о любых исторических изменениях, о которых знает база данных часовых поясов, тогда как прямая форма знает только текущие правила, поэтому историческое время будет неверным.
Если вам не нужно запускать какие-либо другие команды или делать что-либо еще после вызова скрипта sub -, вы можете использовать:
exec sub_script
exec
— это встроенная оболочка, которая:
$ help exec
exec: exec [-cl] [-a name] [command [arguments...]] [redirection...]
Replace the shell with the given command.
Execute COMMAND, replacing this shell with the specified program.
ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified,
any redirections take effect in the current shell.
Options:
-a name pass NAME as the zeroth argument to COMMAND
-c execute COMMAND with an empty environment
-l place a dash in the zeroth argument to COMMAND
If the command cannot be executed, a non-interactive shell exits, unless
the shell option `execfail' is set.
Exit Status:
Returns success unless COMMAND is not found or a redirection error occurs.
Таким образом, после запуска exec sub_script
вы окончательно вышли из родительского сценария и не можете вернуться к нему снова.
В качестве альтернативы можно использовать дополнительный сценарий -:
.#!/bin/sh
echo one.sh: pid is "$$"
../two.sh
echo done with "$0"
(команда .
точно такая же, как source
в bash
, но .
более переносима)
echo two.sh: pid is "$$"
Пробный запуск:
$./one.sh
one.sh: pid is 31290
two.sh: pid is 31290
done with./one.sh
Сценарий two.sh
будет запущен в той же среде оболочки, что и one.sh
, и оболочка не будет создавать новый процесс для его запуска. Он ведет себя очень похоже на вызов функции оболочки, во многих отношениях (, например, используйте return
, а не exit
, чтобы вернуть управление из two.sh
в one.sh
досрочно; exit
полностью выйдет из сеанса оболочки ).