#!/bin/bash ### emacs-shell-lib - shared code for Emacs shell scripts ## Copyright (C) 2022-2023 Free Software Foundation, Inc. ## Author: Stefan Kangas ## This file is part of GNU Emacs. ## GNU Emacs is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## GNU Emacs is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## You should have received a copy of the GNU General Public License ## along with GNU Emacs. If not, see . ### Code: # Set an explicit umask. umask 077 # Treat unset variables as an error. set -o nounset # Exit immediately on error. set -o errexit # Avoid non-standard command output from non-C locales. unset LANG LC_ALL LC_MESSAGES PN=${0##*/} # basename of script PD=${0%/*} # script directory [ "$PD" = "$0" ] && PD=. # if PATH includes PWD die () # write error to stderr and exit { [ $# -gt 0 ] && echo "$PN: $@" >&2 exit 1 } emacs_tempfiles=() emacs_tempfiles_cleanup () { for file in ${emacs_tempfiles[@]}; do rm -f "${file}" 2> /dev/null done } trap ' ret=$? emacs_tempfiles_cleanup exit $ret ' EXIT emacs_mktemp () { local readonly file="${1-}" local tempfile local prefix if [ -z "$file" ]; then prefix="$PN" else prefix="$1" fi if [ -x "$(command -v mktemp)" ]; then tempfile=$(mktemp "${TMPDIR-/tmp}/${prefix}.XXXXXXXXXX") else tempfile="${TMPDIR-/tmp}/${prefix}.$RANDOM$$" (umask 077 && touch "$tempfile") fi [ -z "${tempfile}" ] && die "Creating temporary file failed" emacs_tempfiles+=("${tempfile}") echo "$tempfile" }