Bash

嘗試/最終使用 bash shell

  • August 12, 2019

我有這三行:

 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"

我假設創建子外殼並使用 set +e 性能稍差等。

你可以設置一個陷阱:

#!/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

引用自:https://unix.stackexchange.com/questions/535057