!["소스" 명령의 반대](https://linux55.com/image/124652/%22%EC%86%8C%EC%8A%A4%22%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%EB%B0%98%EB%8C%80.png)
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'