#!/bin/bash # Sample filesystem usage into a cache file, for widgets/disks.lua. # # This exists so the draw hook never calls statfs on an NFS path. An # unreachable server blocks that call, and blocking the Cairo draw freezes the # whole dashboard; here it costs a stale cache and nothing else. # # One NFS mount per server: Library and Slackware are the same export on one # server, shared and backup_danix the same on another, so showing all four # printed every number twice. set -u CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/udt" CACHE="$CACHE_DIR/disks.txt" MOUNTS=(/ /home /data /mnt/nfs/Library /mnt/nfs/shared) umask 077 mkdir -p "$CACHE_DIR" TMP="$CACHE.tmp.$$" trap 'rm -f "$TMP"' EXIT # /usr/bin/df by absolute path with -P -B1, deliberately: # - the user's shell aliases df to `df -h`, and an alias or a function would # hand the parser '1.6G' where it expects an integer # - -P is the POSIX format, one line per filesystem, mountpoint last # - -B1 is bytes, so the widget does the formatting and the parser never # has to interpret a suffix if ! /usr/bin/df -P -B1 "${MOUNTS[@]}" > "$TMP" 2>/dev/null; then # A single unreachable mount must not discard the others: df still reports # the ones it could stat, so keep the output if it has any data rows. if [ "$(wc -l < "$TMP")" -lt 2 ]; then echo "disks-sample: df produced nothing usable" >&2 exit 1 fi fi mv -f "$TMP" "$CACHE"