"소스" 명령의 반대

"소스" 명령의 반대

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 >

답변1

서브셸 사용(권장)

서브셸에서 source 명령을 실행합니다.

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

서브쉘은 괄호로 정의됩니다: (...). 서브쉘에 설정된 모든 쉘 변수는 서브쉘이 끝나면 잊혀집니다.

사용이 설정되지 않았습니다.

그러면 아래에 내보낸 모든 변수가 설정 해제됩니다 linuxmachines_mount_point.txt.

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

  • /^export/{print $2}

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

  • unset $(...)

    그러면 내부에서 명령이 실행되고 $(...)표준 출력이 캡처되며 출력에서 ​​이름이 지정된 모든 변수가 설정 해제됩니다.

답변2

source스크립트를 취소할 수 없습니다 .

내보낸 모든 변수를 임시 파일에 저장하고, 스크립트를 가져온 후 변수와 비교한 다음, Remove Overflow 를 사용하면 됩니다 unset. 예를 들면 다음과 같습니다.

export > temp_file
source myscript

#... do some stuff

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

답변3

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

답변4

가장 쉬운 방법은 스크립트 효과를 취소하는 명령도 정의하도록 스크립트를 수정하는 것입니다.

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'

관련 정보