Создание сценария оболочки, содержащего "typeset -r VAR = value" - PullRequest
0 голосов
/ 29 декабря 2011

Каков хороший способ изменить сценарий A, содержащий

"typeset -r VAR=value"

, чтобы сделать сценарий повторяемым (при сохранении оператора)?

В настоящее время рассматриваемый сценарий вводится пользователем .profile во время входа в систему, а затем снова включается другими сценариями, запускаемыми пользователем из командной строки.

Как есть,сценарий выдаст ошибку при последующих запусках, поскольку VAR уже будет доступен только для чтения.

uname -a: Linux demon 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

Обновление проблемы:

Если вы закомментируете расстановку точек в сценарии Aпо сценарию .profile пользователя, то при входе в систему сценарий B, точки которого в сценарии A, можно запускать снова и снова без проблем.Однако если вы затем запустите сценарий A из командной строки, последующие вызовы сценария B завершатся с ошибкой.

Чем объясняется такое поведение?

  • Кажется, потому что .profile работает в самой большой оболочке в системе, а скрипт B запускается во временной подоболочке.

Как это исправить?

  • Как можно обновить скрипт B так, чтобы он проверял только для чтения и значение VAR, прежде чем пытаться установить значение VAR и сделать чтение VARтолько?

1 Ответ

0 голосов
/ 30 декабря 2011

Вы можете сделать:

test -z "${VAR+set}" && typeset -r VAR=value
...