diff --git a/.bashrc b/.bashrc index 522a590..e8891b4 100644 --- a/.bashrc +++ b/.bashrc @@ -195,7 +195,8 @@ __read_ssh_agents() { # Do locking the sucky way on macOS. for ((I = 0; I <= 5; I++)); do if shlock -p "$$" -f "$HOME/.ssh/agents.lock"; then - exec {FD}<"$HOME/.ssh/agents" + exec 9<"$HOME/.ssh/agents" + FD="9" # Make note of the mtime for use in write_ssh_agents. SSH_AGENTS_MTIME="$(stat -f %Fm "$HOME/.ssh/agents")" ERR=0 @@ -221,7 +222,7 @@ __read_ssh_agents() { ERR=$? # Close the file descriptor (which on Linux releases the flock too). - exec {FD}<&- + : "$FD"<&- # On Darwin, release the lock on the file. rm -f "$HOME/.ssh/agents.lock" @@ -266,7 +267,7 @@ __write_ssh_agents() { (( ${MTIME/\.} > SSH_AGENTS_MTIME )) && return 2 # Lock the agents file. - exec {FD}<"$HOME/.ssh/agents" && flock -E 10 -e -w 0.5 "$FD" + exec {FD}>"$HOME/.ssh/agents" && flock -E 10 -e -w 0.5 "$FD" ERR=$? if (( ERR == 10 )); then printf "\\033[1;31m%s\\033[39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 @@ -277,13 +278,14 @@ __write_ssh_agents() { fi elif [[ "$(uname -s)" == "Darwin" ]]; then # Make sure SSH_AUTH_SOCKS has the most up to date data. - MTIME="$(stat --format=%.9Y "$HOME/.ssh/agents")" + MTIME="$(stat -f %Fm "$HOME/.ssh/agents")" (( ${MTIME/\.} > SSH_AGENTS_MTIME )) && return 2 # Do locking the sucky way on OSX. for ((I = 0; I <= 5; I++)); do if shlock -p "$$" -f "$HOME/.ssh/agents.lock"; then - exec {FD}<"$HOME/.ssh/agents" + exec 9>"$HOME/.ssh/agents" + FD="9" ERR=0 break else @@ -305,7 +307,7 @@ __write_ssh_agents() { [[ -n "${SOCKS[*]}" ]] && { printf "%s\\n" "${SOCKS[@]}" >"$HOME/.ssh/agents" 2>/dev/null; ERR=$?; } # Release locks. - exec {FD}>&- + : "$FD"<&- rm -f "$HOME/.ssh/agents.lock" # Error out if the data couldn't be written.