使用 bash shell 进行 try/finally

使用 bash shell 进行 try/finally

我有这三行:

  export bunion_uds_file="$bunion_socks/$(uuidgen).sock";
  "$cmd" "$@" | bunion
  rm -f "$bunion_uds_file"

我需要确保最后一行始终执行..我可以这样做:

  export bunion_uds_file="$bunion_socks/$(uuidgen).sock";
  (
    set +e
    "$cmd" "$@" | bunion
    rm -f "$bunion_uds_file"
  )

或者也许像这样:

  export bunion_uds_file="$bunion_socks/$(uuidgen).sock";
  "$cmd" "$@" | bunion && rm -f "$bunion_uds_file" || rm -f "$bunion_uds_file"

我假设创建子 shell 并使用 set +e 的性能稍差等。

答案1

你可以设置一个陷阱:

#!/bin/bash

export bunion_uds_file="$bunion_socks/$(uuidgen).sock"
trap 'rm -f "$bunion_uds_file"' EXIT

"$cmd" "$@" | bunion

这将使rm -f命令在 shell 会话终止时运行,除非由KILL信号终止。

正如 mosvy 在评论中指出的那样,如果这是一个在使用前需要清理的套接字,那么在重新创建和使用它之前将其删除会更容易:

#!/bin/bash

export bunion_uds_file="$bunion_socks/$(uuidgen).sock"
rm -f "$bunion_uds_file" || exit 1

"$cmd" "$@" | bunion

相关内容