`source` 명령의 반대 sdd sdb sdf sdc” export

source변수 값을 읽거나 인쇄하기 위해 bash 스크립트에서 명령을 사용 합니다.

more linuxmachines_mount_point.txt

export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"

source  linuxmachines_mount_point.txt

echo $linuxmachine01
sdb sdc sdf sdd sde sdg

source변수를 설정 해제하기 위해 반대는 무엇입니까 ?

예상 결과

echo $linuxmachine01

< no output >


답변

서브 쉘 사용 (권장)

서브 쉘에서 소스 명령을 실행하십시오.

(
source linuxmachines_mount_point.txt
cmd1 $linuxmachine02
other_commands_using_variables
etc
)
echo $linuxmachine01  # Will return nothing

서브 쉘은 parens에 의해 정의됩니다 (...). 서브 쉘이 종료되면 서브 쉘 내에 설정된 모든 쉘 변수가 잊혀집니다.

설정되지 않은 사용

다음으로 내 보낸 변수를 설정 해제합니다 linuxmachines_mount_point.txt.

unset $(awk -F'[ =]+' '/^export/{print $2}' linuxmachines_mount_point.txt)
  • -F'[ =]+' awk에게 공백과 등호의 조합을 필드 구분 기호로 사용하도록 지시합니다.

  • /^export/{print $2}

    이것은 awk에게 시작하는 줄을 선택한 export다음 두 번째 필드를 인쇄하도록 지시 합니다.

  • unset $(...)

    이 명령은 inside 명령을 실행 $(...)하고 stdout을 캡처 한 후 출력에 의해 명명 된 변수를 설정 해제합니다.


답변

source스크립트를 해제 할 수 없습니다 .

할 수있는 일은 내 보낸 모든 변수를 임시 파일에 저장하고 스크립트를 소싱 한 후 변수와 비교 한 다음 다음과 같이 오버플로를 제거하는 것입니다 unset.

export > temp_file
source myscript

#... do some stuff

unset "$(comm -3 <(sort temp_file) <(export | sort) | awk -F'[ =]' '{print $3}' | tr '\n' ' ')"

답변

unset명령을 사용 하여 변수를 “잊어 버릴”수 있습니다.


답변

원하는 결과를 얻는 가장 간단한 해결책은 변수를 비어있는 것으로 다시 선언하는 것입니다.

$ export linuxmachine01="sdb sdc sdf sdd sde sdg"
$ echo "$linuxmachine01"
sdb sdc sdf sdd sde sdg

$ linuxmachine01=""
$ echo "$linuxmachine01"
$

물론 변수는 여전히 정의되어 있고 내보내지고 비어 있지만 정의됩니다.

$ declare -p linuxmachine01
declare -x linuxmachine01=""

환경과 실행중인 쉘에서 변수를 올바르게 제거하려면 unset (권장 방법)을 사용해야합니다.

$ unset linuxmachine01
$ declare -p linuxmachine01
bash: declare: linuxmachine01: not found
$ echo "$linuxmachine01"
$

답변

가장 간단한 방법은 스크립트를 수정하여 스크립트의 효과를 취소하는 명령을 정의하는 것입니다.

export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
alias linuxmachines_mount_point='for v in linuxmachine01 linuxmachine02 linuxmachine03 linuxmachine04; do unset $v; done; unalias linuxmachines_mount_point'

답변

linuxmachines_mount_point.txt를 다음과 같이 작성할 수 있습니다

test "$linuxmachine01" && unset -v linuxmachine01 || linuxmachine01="sdb sdc sdf sdd sde sdg"

변수가 필요할 때

source linuxmachines_mount_point.txt

변수를 제거하고 싶을 때

source linuxmachines_mount_point.txt

답변

source명령을 사용하여 를 활성화하는 경우 명령을 VirtualEnvironment사용하여 종료 할 수 있습니다 deactivate.