#!/bin/bash if [ ! -z "${2}" ]; then echo "Expected only one argument" exit 1 elif [ -z "${1}" ]; then echo "No file path provided" exit 1 fi set -euo pipefail destfile_pfx="$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32)" || true while [ -d "/tmp/doasedit/$destfile_pfx" ]; do destfile_pfx="$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32)" done mkdir -p /tmp/doasedit/$destfile_pfx srcfile="$(doas realpath $1)" if doas [ -f "$srcfile" ]; then doas cp $srcfile /tmp/doasedit/$destfile_pfx/edit doas chown -R $USER:$USER /tmp/doasedit/$destfile_pfx/edit doas cp $srcfile /tmp/doasedit/$destfile_pfx/file else # create file with "regular" system permissions (root:root 644) touch /tmp/doasedit/$destfile_pfx/file doas chown root:root /tmp/doasedit/$destfile_pfx/file fi $EDITOR /tmp/doasedit/$destfile_pfx/edit cat /tmp/doasedit/$destfile_pfx/edit | doas tee /tmp/doasedit/$destfile_pfx/file 1>/dev/null if cmp -s "/tmp/doasedit/$destfile_pfx/file" "$srcfile"; then echo "Skipping write; no changes." else doas mv -f /tmp/doasedit/$destfile_pfx/file $srcfile fi rm -rf /tmp/doasedit/$destfile_pfx