fix(dt): macOS portability (lsof cwd, BSD date start time, bash 3.2 tilde, sed -E help)
This commit is contained in:
@@ -28,12 +28,22 @@ _pids_for_socket() {
|
|||||||
pgrep -f -- "dtach -[cnAN] $sock" 2>/dev/null | sort -u
|
pgrep -f -- "dtach -[cnAN] $sock" 2>/dev/null | sort -u
|
||||||
}
|
}
|
||||||
|
|
||||||
_cwd_of() { readlink -f "/proc/$1/cwd" 2>/dev/null; }
|
# Dossier courant du process : /proc sur Linux, lsof sur macOS (pas de /proc).
|
||||||
|
_cwd_of() {
|
||||||
|
if [ -d /proc ]; then
|
||||||
|
readlink -f "/proc/$1/cwd" 2>/dev/null
|
||||||
|
else
|
||||||
|
lsof -a -p "$1" -d cwd -Fn 2>/dev/null | sed -n 's/^n//p'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Heure de demarrage REELLE du process (fiable, immuable), en epoch.
|
# Heure de demarrage REELLE du process (fiable, immuable), en epoch.
|
||||||
|
# date -d = GNU (Linux), date -j -f = BSD (macOS). Locale C : format lstart stable.
|
||||||
_starttime_of() {
|
_starttime_of() {
|
||||||
local ls; ls=$(ps -o lstart= -p "$1" 2>/dev/null) || return
|
local ls; ls=$(LC_ALL=C ps -o lstart= -p "$1" 2>/dev/null) || return
|
||||||
[ -n "$ls" ] && date -d "$ls" +%s 2>/dev/null
|
[ -n "$ls" ] || return
|
||||||
|
LC_ALL=C date -d "$ls" +%s 2>/dev/null \
|
||||||
|
|| LC_ALL=C date -j -f '%a %b %e %T %Y' "$ls" +%s 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
_age() {
|
_age() {
|
||||||
@@ -52,6 +62,8 @@ _age() {
|
|||||||
emit_raw() {
|
emit_raw() {
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
local sock name pids master cwd start
|
local sock name pids master cwd start
|
||||||
|
# Tilde via variable : "\~" en remplacement reste "\~" sous bash 3.2 (macOS).
|
||||||
|
local tilde='~'
|
||||||
for sock in "$DTDIR"/*; do
|
for sock in "$DTDIR"/*; do
|
||||||
[ -S "$sock" ] || continue
|
[ -S "$sock" ] || continue
|
||||||
name=$(basename "$sock")
|
name=$(basename "$sock")
|
||||||
@@ -61,7 +73,7 @@ emit_raw() {
|
|||||||
cwd=$(_cwd_of "$master"); cwd="${cwd:-?}"
|
cwd=$(_cwd_of "$master"); cwd="${cwd:-?}"
|
||||||
start=$(_starttime_of "$master"); start="${start:-$now}"
|
start=$(_starttime_of "$master"); start="${start:-$now}"
|
||||||
# colonnes : NOM(cache pour fzf) TAB DOSSIER TAB AGE
|
# colonnes : NOM(cache pour fzf) TAB DOSSIER TAB AGE
|
||||||
printf '%s\t%s\t%s\n' "$name" "${cwd/#$HOME/\~}" "$(_age "$start")"
|
printf '%s\t%s\t%s\n' "$name" "${cwd/#$HOME/$tilde}" "$(_age "$start")"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +111,6 @@ case "${1:-}" in
|
|||||||
kill) shift; cmd_kill "$@" ;;
|
kill) shift; cmd_kill "$@" ;;
|
||||||
sock) shift; cmd_sock "$@" ;;
|
sock) shift; cmd_sock "$@" ;;
|
||||||
--raw) emit_raw ;;
|
--raw) emit_raw ;;
|
||||||
""|-h|--help) sed -n '2,18p' "$0" | sed 's/^# \?//' ;;
|
""|-h|--help) sed -n '2,18p' "$0" | sed -E 's/^# ?//' ;;
|
||||||
*) echo "Commande inconnue: $1"; sed -n '2,18p' "$0" | sed 's/^# \?//'; exit 1 ;;
|
*) echo "Commande inconnue: $1"; sed -n '2,18p' "$0" | sed -E 's/^# ?//'; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user