与“source”命令相反

与“source”命令相反

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

sourcein order 取消设置变量的反义词是什么?

预期成绩

echo $linuxmachine01

< no output >

答案1

使用子 shell(推荐)

在子 shell 中运行 source 命令:

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

子shell 由括号定义:(...)。当子 shell 结束时,在子 shell 中设置的任何 shell 变量都会被忘记。

使用未设置

这会取消设置以下导出的任何变量linuxmachines_mount_point.txt

unset $(awk -F'[ =]+' '/^export/{print $2}' linuxmachines_mount_point.txt)
  • -F'[ =]+'告诉 awk 使用空格和等号的任意组合作为字段分隔符。

  • /^export/{print $2}

    这告诉 awk 选择以 开头的行export,然后打印第二个字段。

  • unset $(...)

    这将运行 inside 的命令$(...),捕获其标准输出,并取消设置由其输出命名的任何变量。

答案2

您无法取消source该脚本。

您可以做的是将所有导出的变量存储在临时文件中,在获取脚本后将其与变量进行比较,然后使用 删除溢出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'

相关内容