Настройка среды Unix из текущего каталога

У меня есть система SunOS, которая усложняет ситуацию из-за простоты.

У меня есть несколько сценариев, которые запускаются по разным путям (неизбежно), и в системе есть структура пути, в которой есть "Системная среда", которую я затем могу извлечь из пути. У меня есть простой скрипт, который вызывается ранее или получен из любого другого скрипта, чтобы получить Среду и установить несколько других общих переменных. Проблема в том, что теперь, когда есть 3 разных области, которые могут вызывать этот скрипт, он не извлекает среду правильно из пути.

Вот простые примеры трех возможных путей:

  • /dir1/dir2/${ENV}/bin/script1.ksh
  • /dir1/dir2/${ENV}/services/service_name/script2.ksh
  • /dir1/dir2/${ENV}/services/service_name/log/script3.ksh

Я хотел бы иметь 1 скрипт, который мог бы получить ${ENV}, независимо от того, какой из путей был предоставлен, в отличие от моей текущей стратегии из 3 отдельных.

Вот как я сейчас получаю первый $ {ENV}:

#!/bin/ksh

export BASE_DIR=${0%/*/*}
export ENV=${BASE_DIR##*/}

2-й сценарий:

#!/bin/ksh

export CURR_DIR=$( cd -- "$(dirname -- "$(command -v -- "$0")")" && pwd)
export BASE_DIR=${CURR_DIR%/*/*}
export ENV=${BASE_DIR##*/}

Как я уже говорил, это система SunOS, поэтому она имеет старую ограниченную версию KSH. Нет набора -А или замены.

Любые идеи о лучшей стратегии, чтобы ограничить мою повторяемость сценариев?

Благодарю.

1 ответ

Из вашего примера видно, что каталог ${ENV} имеет фиксированную глубину от корня, и в этом случае вы можете легко получить имя каталога, начиная с другого конца;

export ENV=`pwd | sed -e "s%\(/dir1/dir2/\)\([^/]*\).*%\2%"`

Я использую "%", чтобы я мог сопоставить "/" без экранирования. Не зная подробностей о том, какую версию SunOS / Solaris вы используете, я не могу быть уверен, насколько совместим ваш sed, но Брюс Барнетт включает его в свои учебные пособия, которые очень тесно связаны с поздними версиями SunOS и ранними версиями Solaris.

Если все ваши скрипты вызываются одним и тем же пользователем, то вы можете включить вышеуказанное в.profile этого пользователя, тогда переменная ENV будет доступна для всех скриптов, принадлежащих / исполняемых этим пользователем.

ОБНОВЛЕНИЕ: "SED - неинтерактивный текстовый редактор" Ли Э. МакМахона, написанный в 1978 году, включает в себя группирование шаблонов с использованием экранированных скобок, поэтому оно должно работать для вас в SunOS.:)

Другие вопросы по тегам