#!/usr/bin/ksh93
################################################################
function usagemsg_mktemp_k93 {
print "
Program: mktemp_k93
This script generates a random temporary file and returns
the name of the generated file to standard output.
Usage: ${1##*/} [-?] [-v] [-V] [-d DIRECTORY]
Where:
'-d' = Directory in which to create the temporary file
'-v' = Verbose mode
'-V' = Very Verbose Mode
Author: Dana French (dfrench@mtxia.com) Copyright 2004
\"AutoContent\" enabled"
return 0
}
################################################################
function mktemp_k93 {
typeset TRUE="0"
typeset FALSE="1"
typeset VERBOSE="${FALSE}"
typeset VERYVERB="${FALSE}"
typeset DD_TMP="/tmp"
typeset EXITCODE="0"
while getopts ":d:vV" OPTION
do
case "${OPTION}" in
'd') DD_TMP="${OPTARG}";;
'v') VERBOSE="${TRUE}";;
'V') VERYVERB="${TRUE}";;
'?') usagemsg_mktemp_k93 "${0}" && return 1;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [[ ! -d "${DD_TMP}" ]]
then
print -u 2 "# ERROR: Invalid Directory: ${DD_TMP}"
return 2
fi
(( VERYVERB == TRUE )) && set -x
################################################################
####
#### Generate a random number at least 6 characters long
#### and assign it to a variable that is exactly 6 characters
#### long. Build a temporary file name from this 6
#### character variable using the default temporary
#### directory, or a user specified directory.
####
typeset -L6 RAND="${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
TEMPFILE="${DD_TMP%/}/temp.${RAND}"
(( VERBOSE == TRUE )) && print -u 2 "# Generated Random Number: ${RAND}"
#### Check to see if a file already exists with this full
#### path file name, if so, regenerate the 6 character random
#### number and retest. Repeat this process until a file
#### name is found that does not already exist.
until [[ ! -f ${TEMPFILE} ]]
do
(( VERBOSE == TRUE )) && print -u 2 "# ${TEMPFILE} already exists, retrying"
typeset -L6 RAND="${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
TEMPFILE="${DD_TMP%/}/temp.${RAND}"
(( VERBOSE == TRUE )) && print -u 2 "# Generated Random Number: ${RAND}"
done
#### Create an empty file using this randomly generated file
#### name. Set the umask to create the file with 600 permissions,
#### meaning the owner has read-write permission, all other
#### permissions are denied. Reset the umask back to its
#### orignal setting after the temporary file is created.
(( VERBOSE == TRUE )) && print -u 2 "# Creating ${TEMPFILE}"
UMASK=$( umask )
umask 0077
if ! exec 3>"${TEMPFILE}"
then
print -u 2 "# ERROR: Unable to create temporary file"
EXITCODE="3"
fi
exec 3>&-
umask ${UMASK}
#### Print the file name to standard output so the calling
#### program will know the name of the randomly generated
#### temporary file.
print -- "${TEMPFILE}"
#### Return to the calling function with a successful return code.
return ${EXITCODE}
}
################################################################
mktemp_k93 "${@}"