我有这三行:
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