bash 쉘을 사용해 보십시오/마지막으로

bash 쉘을 사용해 보십시오/마지막으로

나는 다음 세 줄을 가지고 있습니다 :

  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를 사용하면 성능이 약간 저하된다고 가정합니다.

답변1

트랩을 설정할 수 있습니다.

#!/bin/bash

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

"$cmd" "$@" | bunion

이렇게 하면 신호에 의해 종료 rm -f되지 않는 한 쉘 세션이 종료될 때 명령이 실행 됩니다 .KILL

Mosvy가 의견에서 지적했듯이, 사용하기 전에 정리해야 하는 소켓인 경우 다시 생성하고 사용하기 전에 삭제하는 것이 더 쉬울 것입니다.

#!/bin/bash

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

"$cmd" "$@" | bunion

관련 정보