Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash陷阱条件命令_Bash_Shell_Scripting - Fatal编程技术网

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
    
  • >P>取决于“代码> TungEdir < /Cube >的值被设置时,您可以考虑将整个命令放在单引号中,以便在命令实际运行之前不扩展<代码> TungEdir < /Cord>:

    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
    
  • >P>取决于“代码> TungEdir < /Cube >的值被设置时,您可以考虑将整个命令放在单引号中,以便在命令实际运行之前不扩展<代码> TungEdir < /Cord>:

    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
    被显式设置为目录名,并在退出之前使用。实际上,它并不防止删除不打算删除的目录,因此在某些情况下,您必须假设它命名了一个打算删除的目录。