A NOTE has been added to this issue. ====================================================================== https://www.austingroupbugs.net/view.php?id=1616 ====================================================================== Reported By: illiliti Assigned To: ====================================================================== Project: Issue 8 drafts Issue ID: 1616 Category: Shell and Utilities Type: Enhancement Request Severity: Editorial Priority: normal Status: New Name: Mark Lundblad Organization: User Reference: Section: Shell and Utilities Page Number: - Line Number: - Final Accepted Text: ====================================================================== Date Submitted: 2022-11-08 23:03 UTC Last Modified: 2025-02-28 18:37 UTC ====================================================================== Summary: Standardize mktemp utility ======================================================================
---------------------------------------------------------------------- (0007089) eblake (manager) - 2025-02-28 18:37 https://www.austingroupbugs.net/view.php?id=1616#c7089 ---------------------------------------------------------------------- Before page 3178 (XCU more), insert new page(s) containing the following: <b>NAME</b> <blockquote>mktemp - create temporary unique file or directory</blockquote> <b>SYNOPSIS</b> <blockquote>mktemp [-dq] [-p <i>directory</i>] [<i>template</i>]</blockquote> <b>DESCRIPTION</b> <blockquote>The <i>mktemp</i> utility shall create a temporary file or directory based on a <i>template</i>, as if by calling <i>mkstemp</i>( ). <b>OPTIONS</b> <blockquote> -d <blockquote>Create directory instead of file, as if by calling <i>mkdtemp</i>( ) instead of <i>mkstemp</i>( ).</blockquote> -p <i>directory</i> <blockquote>Specify the directory where the temporary file will be created; if this option is specified, behavior shall be unspecified if <i>template</i> contains any <tt>'/'</tt> characters. Behavior shall be unspecified if <i>directory</i> is an empty string.</blockquote> -q <blockquote>Suppress output to the standard error if an error occurs.</blockquote> <b>OPERANDS</b> <blockquote>The following operand shall be supported: <i>template</i> <blockquote>Specify a template to use in creating the temporary file or directory; behavior is unspecified if <i>template</i> does not end in at least six trailing <tt>'X'</tt> characters. If <i>template</i> is omitted, an implementation-defined default template shall be used. If <i>template</i> is a relative pathname, and the <b>-p</b> option was not provided, it is unspecified whether it is treated as relative to the current working directory or to the directory named by the <i>TMPDIR</i> environment variable.</blockquote> <b>STDIN</b> <blockquote>Not used.</blockquote> <b>INPUT FILES</b> <blockquote>None.</blockquote> <b>ENVIRONMENT VARIABLES</b> <blockquote>The following environment variables shall affect the execution of <i>mktemp</i>: <i>LANG</i> <blockquote>Provide a default value for the internationalization variables that are unset or null. (See XBD Section 8.2 (on page 169) for the precedence of internationalization variables used to determine the values of locale categories.)</blockquote> <i>LC_ALL</i> <blockquote>If set to a non-empty string value, override the values of all the other internationalization variables.</blockquote> <i>LC_CTYPE</i> <blockquote>Determine the locale for the interpretation of sequences of bytes of text data as characters (for example, single-byte as opposed to multi-byte characters in arguments).</blockquote> <i>LC_MESSAGES</i> <blockquote>Determine the locale that should be used to affect the format and contents of diagnostic messages written to standard error.</blockquote> [XSI]<i>NLSPATH</i> <blockquote>Determine the location of messages objects and message catalogs.</blockquote>[/XSI] <i>TMPDIR</i> <blockquote>The pathname of an existing directory designed to hold temporary files created by the current user.</blockquote></blockquote> <b>ASYNCHRONOUS EVENTS</b> <blockquote>Default.</blockquote> <b>STDOUT</b> <blockquote>The <i>mktemp</i> utility shall write a line to the stdout output in the following format: <tt>"%s\n", <<i>absolute path to resulting file</i>></tt></blockquote> <b>STDERR</b> <blockquote>The standard error shall be used only for diagnostic messages.</blockquote> <b>OUTPUT FILES</b> <blockquote>None.</blockquote> <b>EXTENDED DESCRIPTION</b> <blockquote>None.</blockquote> <b>EXIT STATUS</b> <blockquote>The following exit values shall be returned: 0 Successful completion. >0 An error occurred.</blockquote> <b>CONSEQUENCES OF ERRORS</b> <blockquote>Default.</blockquote> <b>APPLICATION USAGE</b> <blockquote>Historical implementations differ on what happens if the <i>template</i> contains a <slash> character, and on whether the current working directory or the environment variable <i>TMPDIR</i> take precedence when the <b>-p</b> option is not supplied. If an application must control the directory that contains the resulting temporary file, the most portable way to do so is with the <b>-p</b> option. All known historical implementations support the use of <i>mktemp</i> without an explicit <i>template</i> operand; however, the implementation's default template need not comply with the requirement that an explicit template must end in at least 6 <tt>'X'</tt> bytes.</blockquote> <b>EXAMPLES</b> <blockquote> 1. Create and use a temporary file, ignoring failure. <tt>file=$(mktemp -q file.XXXXXX) && { echo ... > "$file" # Use $file within this block rm "$file" }</tt> 2. Create a secure FIFO within a temporary directory under /tmp. <tt>dir=$(mktemp -d -p /tmp dir.XXXXXX) || exit 1 fifo=$dir/fifo mkfifo "$fifo" || { rmdir "$dir"; exit 1; }</tt></blockquote> <b>RATIONALE</b> <blockquote>Several implementations provide a <b>-u</b> option to immediately unlink the temporary file after it is created, which roughly behaves as a way to generate a random file name that does not exist at the time it was printed. However, this mode suffers from the same safety problems as <i>mktemp</i>( ) in introducing a race between time of check and time of use, so the standard developers did not choose to standardize the option. Older versions of the standard provide other means to safely generate a secure file name, such as the use of the <b>mkstemp</b> macro of the <i>m4</i> utility, or by open-coding a shell loop with <tt>set -C</tt> that tries various candidate names. However, the convenience and conciseness of the <i>mktemp</i> utility, along with a large number of fairly similar implementations, was sufficient to include the utility in this version of the standard.</blockquote> <b>FUTURE DIRECTIONS</b> <blockquote>None.</blockquote> <b>SEE ALSO</b> <blockquote><i>mkdtemp</i>( ), <i>mkstemp</i>( )</blockquote> <b>CHANGE HISTORY</b> <b>Issue 9</b> <blockquote>Austin Group Defect 1616 is applied, introducing the <i>mktemp</i> utility.</blockquote> Issue History Date Modified Username Field Change ====================================================================== 2022-11-08 23:03 illiliti New Issue 2022-11-08 23:03 illiliti Name => Mark Lundblad 2022-11-08 23:03 illiliti Section => Shell and Utilities 2022-11-08 23:03 illiliti Page Number => - 2022-11-08 23:03 illiliti Line Number => - 2022-11-08 23:30 steffen Note Added: 0006038 2022-11-09 13:18 illiliti Note Added: 0006041 2023-02-22 13:30 ormaaj Note Added: 0006166 2023-02-22 19:10 ormaaj Note Edited: 0006166 2025-02-28 18:37 eblake Note Added: 0007089 ======================================================================
