같은 디렉터리에 있는 파일에 정의된 변수 값을 사용

같은 디렉터리에 있는 파일에 정의된 변수 값을 사용

존재하다이 GitHub 저장소라는 디렉토리가 있습니다 nwsm. 이 디렉토리에는 nwsm.sh기본 스크립트(다른 스크립트를 실행하는 스크립트)가 포함된 파일이 포함되어 있습니다.

이 디렉토리에는 기본 스크립트가 한 번에 하나씩 실행하는 아래 첨자를 포함하는 여러 다른 파일도 포함되어 있습니다.

나는 nwsm.sh위의 모든 첨자에서 결국 사용되어야 할 몇 가지 변수를 선언했습니다. 변수 확장 및 첨자는 nwsm.sh실행 시 동일한 방식으로 수행되어야 합니다.


이 디렉토리에는 아래 첨자 파일을 제외한 다른 파일이 포함되어 있지 않으며 nwsm.sh향후 어떤 경우에도 다른 파일이 포함되어서는 안 됩니다.

실행을 시작한 후 nwsm.sh, 에 정의된 관련 값을 사용하여 첨자 내 변수 확장을 수행해야 합니다.nwsm.sh

다음은 기본 스크립트입니다 nwsm.sh(먼저 유틸리티의 변수 선언 read, 그 다음 인접 파일 실행).

#!/bin/bash
domain="$1" && test -z "$domain" && exit 2

read -sp "Please enter DB root password:      " dbrootp_1 && echo
read -sp "Please enter DB root password again:" dbrootp_2 && echo
if [ "$dbrootp_1" != "$dbrootp_2" ]; then echo "Values unmatched" && exit 1 fi

read -sp "Please enter DB user password:      " dbuserp_1 && echo
read -sp "Please enter DB user password again:" dbuserp_2 && echo
if [ "$dbuserp_1" != "$dbuserp_2" ]; then echo "Values unmatched" && exit 1 fi

"$PWD"/tests.sh
"$PWD"/wp-cli.sh
"$PWD"/nginx.sh
"$PWD"/dbstack.sh
"$PWD"/certbot.sh

에 정의된 값을 nwsm.sh실행할 때 모든 대응 항목이 사용할 수 있도록 하려면 어떻게 해야 합니까?.nwsm

답변1

기본 스크립트가 다른 스크립트를 실행할 때 변수를 표시하려는 경우 해당 export변수를 사용할 수 있습니다.

$catowner.sh
#!/bin/sh
부자를 읽어라
수출 부자
./foo.sh
$ 고양이 foo.sh
#!/bin/sh
echo "foo는 $foo입니다"

$ ./main.sh
무의미한 말
foo는 말도 안 되는 소리야
$

다른 스크립트는 기본 스크립트의 하위 프로세스로 실행되며 exported 변수는 환경을 통해 전달됩니다. 이들 중 어느 것도 변수를 특정 디렉토리의 스크립트로 제한하지 않으며, 내보낸 변수는 기본 스크립트에 의해 시작된 모든 프로그램에서 볼 수 있습니다. 변수를 전달하지 않고 특정 프로그램을 실행하려면 export -n먼저 해당 프로그램의 내보내기를 취소해야 합니다. 변수 전달을 방지하기 위해 다른 스크립트 시작 부분에서 내보내기를 취소할 수도 있습니다.

또한 기본 스크립트(또는 다른 스크립트) 끝에서 변수를 지우거나 내보내기를 취소할 필요가 없습니다. 변수는 실행 중인 쉘 프로세스의 메모리에만 존재하며 프로세스가 끝나면 사라집니다.

(반면에 변수를 독립 실행형 프로세스에 전달하려면 해당 변수를 파일이나 유사한 파일에 저장해야 합니다.)


물론 거의 동일한 유형의 모듈성을 달성하는 또 다른 방법은 프로그램을 함수로 분할하고 별도의 파일에 저장한 다음 source이러한 파일을 기본 스크립트와 별도로 유지하는 것입니다. 이렇게 하면 프로그램의 모든 변수가 모든 함수에 표시됩니다. (이것이 바람직할 수도 있고 바람직하지 않을 수도 있습니다.)

답변2

변수를 내보내는 경우 기본 스크립트 끝에서 변수를 "설정 해제"하십시오.

unset domain
unset dbrootp_1
unset dbrootp_2
unset dbuserp_1
unset dbuserp_2

unset: unset [-f] [-v] [name ...] 각 NAME에 대해 해당 변수 또는 함수를 삭제합니다. -v', unset will only act on variables. Given the-f' 플래그가 주어지면 설정 해제는 기능에만 영향을 미칩니다. 플래그가 없으면 unset은 먼저 변수를 설정 해제하려고 시도하고, 실패하면 함수 설정을 해제하려고 시도합니다. 일부 변수는 설정 해제할 수 없습니다. 읽기 전용도 참조하세요.

관련 정보