2014-05-22 4 views
1

나는 SunOS 시스템을 가지고 있는데, 이는 단순한 것으로부터 이러한 상황을 복잡하게 만든다.현재 디렉토리의 유닉스 환경 설정

다른 경로에서 실행되는 일부 스크립트 (어쩔 수없는)가 있고 시스템에 경로에 "시스템 환경"이있는 경로 구조가 있습니다. 경로에서 경로를 추출 할 수 있습니다. 이전에 호출되었거나 다른 모든 스크립트에서 제공되어 환경을 확보하고 몇 가지 다른 공통 변수를 설정하는 간단한 스크립트가 있습니다. 문제는이 스크립트를 호출 할 수있는 3 가지 영역이 있으므로 경로에서 환경을 제대로 추출하지 못한다는 것입니다. 여기

있을 수 3 개 경로의 간단한 예입니다

  • /dir1/dir2/${ENV}/bin/script1.ksh
  • /DIR1/DIR2/$ {ENV}/서비스/SERVICE_NAME/script2.ksh
  • /dir1/dir2/${ENV}/services/service_name/log/script3.ksh

나는 얻을 수있을 것입니다, 1 스크립트가하고 싶습니다 $ {ENV}은 현재 전략 인 3 단계와 반대 경로 중 어느 경로가 제공되었는지에 관계없이 parate 것들. 여기

내가 현재있는 최초 $ {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. 세트 -A 또는 대체가 없습니다.

스크립트의 반복성을 제한하는 최상의 전략에 대한 아이디어가 있습니까?

감사합니다.

답변

0

$ {ENV} 디렉토리는 루트에서 고정 된 깊이로 보이는 경우, 다른 끝에서 시작하여 쉽게 디렉토리의 이름을 얻을 수 있습니다.

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

탈출하지 않고 '/'를 찾을 수 있도록 '%'을 사용하고 있습니다. 사용중인 SunOS/Solaris의 버전에 대한 구체적인 내용을 모르는 채 sed가 얼마나 잘 호환되는지는 알 수 없지만 Bruce Barnett은 늦은 SunOS 및 초기 Solaris 버전과 매우 밀접하게 연관된 his tutorials에이 내용을 포함시킵니다.

스크립트가 모두 동일한 사용자에 의해 호출 된 경우 해당 사용자의 .profile에 위의 스크립트를 포함하면 해당 사용자가 소유/실행하는 모든 스크립트에서 ENV 변수에 액세스 할 수 있습니다.

UPDATE : 리 E 맥마흔의 "SED -- A Non-Interactive Text Editor"-1978 작성이 - 패턴을 포함 그룹화 괄호를 탈출하여, 그래서 SunOS의에 당신을 위해 작동합니다. :)