Shell 스 크 립 트 가 다른 스 크 립 트 를 호출 하 는 세 가지 방법

4418 단어 shell각본호출
스 크 립 트 first.sh 가 있다 면:

#!/bin/bash
#------------------
#@file:first.sh
#------------------
echo 'your are in first file'
어떻게 다른 Shell 스 크 립 트 에서 first.sh 를 호출 합 니까?주로 세 가지 방법 이 있 습 니 다.source,포인트,sh 명령 입 니 다.
1.source

#!/bin/bash
#---------------
#@file:second.sh
#---------------
echo 'your are in second file'
source first.sh
2.포인트.

#!/bin/bash
echo 'your are in second file'
. first.sh
점 번호 와 스 크 립 트 파일 사이 에 빈 칸 이 있어 야 합 니 다.
3.sh 명령

#!/bin/bash
echo 'your are in second file'
sh first.sh
삼자 출력의 결 과 는 모두:
your are in second file
your are in first file
4.삼자 의 차이
source 명령 과 점 호 를 사용 합 니 다.등가 입 니 다.C/C++의\#include 예비 처리 명령 과 유사 합 니 다.지정 한 스 크 립 트 내용 을 현재 스 크 립 트 에 복사 하여 Shell 프로 세 스 로 실행 합 니 다.sh 명령 을 사용 하여 다른 스 크 립 트 를 호출 하 는 것 은 앞의 두 가지 방법 과 본질 적 인 차이 가 있 습 니 다.sh 명령 을 사용 하면 지정 한 스 크 립 트 를 실행 하기 위해 새로운 셸 프로 세 스 를 시작 합 니 다.그러면 부모 프로 세 스 의 변 수 는 하위 프로 세 스에 서 접근 할 수 없습니다.다음 코드 참조:
first.sh 내용 은 다음 과 같 습 니 다.second.sh 의 변수 second 에 접근 하 였 습 니 다.

#!/bin/bash
echo 'your are in first file'
echo 'second:' $second
second.sh 내용,위 에서 소개 한 세 가지 방법 으로 first.sh 를 호출 하여 second.sh 의 변수 second 접근 에 어떤 차이 가 있 는 지 보 세 요!

#!/bin/bash
second=lvlv
echo 'your are in second file'
source first
. first
sh first
프로그램의 출력 결 과 는:
your are in second file
your are in first file
second: lvlv
your are in first file
second: lvlv
your are in first file
second:
이 를 통 해 알 수 있 듯 이 sh 명령 으로 하위 프로 세 스 를 열 어 지정 한 셸 스 크 립 트 를 호출 하면 부모 프로 세 스 의 변 수 를 접근 할 수 없습니다.우 리 는 어떻게 하위 프로 세 스 를 부모 프로 세 스 의 변 수 를 방문 하 게 합 니까?export 명령 을 사용 할 수 있 습 니 다.
5.export 명령 임시 환경 변수 설정
우 리 는 Shell 에서 변수의 역할 영역 과 생명 주기 에 따라 Shell 변 수 는 네 가지 유형 으로 나 눌 수 있다 는 것 을 알 아야 한다.
(1)영구 환경 변수:설정 파일 을 수정 해 야 합 니 다.변 수 는 영구적 으로 유효 합 니 다.
(2)임시 환경 변수:export 명령 행 성명 을 사용 하면 됩 니 다.변 수 는 셸 스 크 립 트 프로 세 스 가 끝 난 후에 도 유효 하지만 현재 셸 세 션 을 닫 으 면 유효 하지 않 습 니 다.
(3)전역 변수:스 크 립 트 에서 정의 합 니 다.현재 Shell 스 크 립 트 에서 만 유효 합 니 다.다른 Shell 스 크 립 트 프로 세 스 는 본 을 방문 할 수 없습니다.그 역할 도 메 인 은 정 의 된 위치 부터 스 크 립 트 가 끝나 거나 삭 제 된 곳 까지 표 시 됩 니 다.전역 변 수 는 셸 함수 에서 정의 할 수도 있 고 셸 함수 밖에서 정의 할 수도 있 습 니 다.셸 함수 에서 정의 하 는 변 수 는 기본적으로 global 이 고 역할 도 메 인 은'함수 가 호출 될 때 변 수 를 정의 하 는 곳'에서 시작 하여 스 크 립 트 가 끝나 거나 삭 제 된 곳 까지 표 시 됩 니 다.
(4)부분 변수.셸 스 크 립 트 에서 함수 에 local 키 워드 를 사용 하여 정의 하 는 변 수 를 표시 합 니 다.그 역할 영역 은 함수 내 에 국한 된다.같은 이름 의 local 변 수 는 global 변 수 를 차단 합 니 다.
따라서 export 명령 을 사용 하면 임시 환경 변 수 를 설명 합 니 다.현재 셸 세 션 에서 모든 셸 인 스 턴 스 는 export 명령 으로 표 시 된 임시 환경 변 수 를 방문 할 수 있 습 니 다.현재 셸 세 션 의 모든 셸 인 스 턴 스 는 현재 셸 세 션 의 하위 프로 세 스 이기 때문에 부모 프로 세 스 와 함께 환경 변 수 를 방문 할 수 있 습 니 다.
second.sh 수정 은 다음 과 같 습 니 다.

#!/bin/bash
export second=lvlv
echo 'your are in second file'
sh first.sh
second.sh 를 실행 하면 출력 합 니 다:
your are in second file
your are in first file
second: lvlv
이로써 export 명령 을 통 해 임시 환경 변 수 를 설정 하여 셸 서브 프로 세 스 가 부모 프로 세 스 의 변 수 를 방문 할 수 있 도록 합 니 다.
6.export 명령 은 영구적 인 환경 변 수 를 설정 합 니 다.
그렇다면 영구 환경 변 수 를 어떻게 정의 합 니까?다음 과 같은 두 가지 방법 을 사용 할 수 있다.
(1)/etc/profile파일 에 환경 변 수 를 추가 하여 모든 사용자 에 게 영구적 으로 적 용 됩 니 다.예 를 들 어 vim 을 통 해/etc/profile 파일 을 편집 하고 마지막 줄 에 CLASSPATH 변 수 를 추가 합 니 다.

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
파일 을 수정 한 후 바로 효력 이 발생 하려 면 실행 해 야 합 니 다source /etc/profile그렇지 않 으 면 다음 에 다시 로그 인 할 때 만 효력 이 발생 합 니 다.
(2)~/.bash_profile파일 에 환경 변 수 를 추가 하면 현재 사용자 에 게 만 영구적 으로 유효 합 니 다.예 를 들 어 vim 편집 을 통 해~/.bash_profile파일 에 환경 변 수 를 추가 합 니 다.

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
메모:파일 을 수정 한 후 즉시 효력 이 발생 하려 면 실행 해 야 합 니 다source ~/.bash_profile그렇지 않 으 면 다음 에 다시 로그 인 할 때 만 효력 이 발생 합 니 다.
또한,설정 한 환경 변 수 를 삭제 하려 면 unset(builtin)명령 을 사용 하여 환경 변 수 를 제거 할 수 있 습 니 다.예 를 들 어$unset CLASSPATHreadonly 명령 을 사용 하면 읽 기 전용 변 수 를 설정 할 수 있 습 니 다.readonly 명령 을 사용 하면 변 수 를 수정 하거나 제거 할 수 없습니다.
이상 은 Shell 스 크 립 트 가 다른 스 크 립 트 를 호출 하 는 세 가지 방법의 상세 한 내용 입 니 다.Shell 스 크 립 트 가 다른 스 크 립 트 를 호출 하 는 것 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기