Как запустить сценарий bash в том же процессе, что и вызывающий сценарий?

База данных часовых поясов, используемая всеми, поддерживается IANA . Они уже обновили свою базу данных . Лучшее решение для вас - обновить вашу систему; большинство дистрибутивов должны предоставлять обновленный пакет при изменении базы данных часовых поясов.

Если по какой-то причине вы не можете легко обновить свою систему, чтобы установить последнюю версию базы данных часовых поясов, вы можете объявить часовой пояс с помощью переменной среды TZ , которая имеет преимущество в том, что не требуется никакой установки, но недостаток в том, что он требует явной настройки, поэтому он не поможет приложениям, которые работают в нескольких часовых поясах.

export TZ='EST+5'

В системе с Glibc (то есть без встроенного Linux) альтернативой является получение последней базы данных часовых поясов и установка TZ на : / path / to / zoneinfo / American / Cayman (т.е. путь к файлу с двоеточием в начале). Преимущество этого заключается в том, что вы будете знать о любых исторических изменениях, о которых знает база данных часовых поясов, тогда как прямая форма знает только текущие правила, поэтому историческое время будет неверным.

0
29.03.2019, 19:59
2 ответа

Если вам не нужно запускать какие-либо другие команды или делать что-либо еще после вызова скрипта 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вы окончательно вышли из родительского сценария и не можете вернуться к нему снова.

2
28.01.2020, 02:16

В качестве альтернативы можно использовать дополнительный сценарий -:

.

он.ш

#!/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полностью выйдет из сеанса оболочки ).

4
28.01.2020, 02:16

Теги

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