Use correct stat args and fix FD handling on Darwin.
This commit is contained in:
parent
9ed0f4e782
commit
3bbc0192dc
1 changed files with 8 additions and 6 deletions
14
.bashrc
14
.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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue