Bash陷阱条件命令
你能帮我理解我在脚本中找到的这句话吗:Bash陷阱条件命令,bash,shell,scripting,Bash,Shell,Scripting,你能帮我理解我在脚本中找到的这句话吗: trap "[[ -d ${temp_dir} ]] && rm -rf ${temp_dir}" EXIT 我的理解是,trap命令等待退出信号,然后删除目录(如果存在)。 这是正确的还是有人能教我吗?您的解释是正确的,尽管我会对代码本身做两个更改: $temp_dir需要在命令中引用,以确保它对任何有效的目录名都能正确工作。假设temp\u dir的值是/tmp/some dir。按原样,trap命令将是 [[ -d /tmp/som
trap "[[ -d ${temp_dir} ]] && rm -rf ${temp_dir}" EXIT
我的理解是,trap命令等待退出信号,然后删除目录(如果存在)。这是正确的还是有人能教我吗?您的解释是正确的,尽管我会对代码本身做两个更改:
$temp_dir
需要在命令中引用,以确保它对任何有效的目录名都能正确工作。假设temp\u dir
的值是/tmp/some dir
。按原样,trap命令将是
[[ -d /tmp/some dir ]] && rm -rf /tmp/some dir
这是不正确的,因为参数是在trap
命令设置错误处理程序之前展开的。添加一些引号以修复它:
trap "[[ -d '${temp_dir}' ]] && rm -rf '${temp_dir}'" EXIT
trap '[[ -d $temp_dir ]] && rm -rf "$temp_dir"' EXIT
然而,让处理程序尽可能简单通常更简单。定义要调用的函数:
clean_up_temp () {
[[ -d $temp_dir ]] && rm -rf "$temp_dir"
}
只需从处理程序调用函数:
trap clean_up_temp EXIT
您的解释是正确的,尽管我会对代码本身做两个更改:
$temp_dir
需要在命令中引用,以确保它对任何有效的目录名都能正确工作。假设temp\u dir
的值是/tmp/some dir
。按原样,trap命令将是
[[ -d /tmp/some dir ]] && rm -rf /tmp/some dir
这是不正确的,因为参数是在trap
命令设置错误处理程序之前展开的。添加一些引号以修复它:
trap "[[ -d '${temp_dir}' ]] && rm -rf '${temp_dir}'" EXIT
trap '[[ -d $temp_dir ]] && rm -rf "$temp_dir"' EXIT
然而,让处理程序尽可能简单通常更简单。定义要调用的函数:
clean_up_temp () {
[[ -d $temp_dir ]] && rm -rf "$temp_dir"
}
只需从处理程序调用函数:
trap clean_up_temp EXIT
另外,请注意,
[-d$temp\u dir]
中没有任何意义。啊,除非您担心$temp\u dir
存在并且不是目录;据推测,temp_dir
被显式设置为目录名,并在退出之前使用。实际上,它并不防止删除不打算删除的目录,因此在某些情况下,您必须假设它命名了打算删除的目录。另外,请注意,[[[-d$temp\u dir]]
中没有任何意义,除非你担心$temp_dir
存在并且不是一个目录;据推测,temp_dir
被显式设置为目录名,并在退出之前使用。实际上,它并不防止删除不打算删除的目录,因此在某些情况下,您必须假设它命名了一个打算删除的目录。