mktemp fails on Peppermint 4 Linux #399

Closed
opened 2026-01-19 18:30:10 +00:00 by michael · 2 comments
Owner

Originally created by @CalumJEadie on GitHub.

Steps to recreate.

Running on Peppermint 4 Linux.

$ transfer() {
> # write to output to tmpfile because of progress bar
> tmpfile=$( mktemp -t transfer )
> curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile
> cat $tmpfile
> rm -f $tmpfile;
> }
$ alias transfer=transfer
$ transfer /var/log/syslog
mktemp: too few X's in template ‘transfer’
-bash: $tmpfile: ambiguous redirect

What's going wrong?

In the version of mktemp on Peppermint 4 Linux, template requires at least 3 consecutive XXX's.

$ mktemp --help
mktemp --help
Usage: mktemp [OPTION]... [TEMPLATE]
Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive 'X's in last component.
If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and --tmpdir is implied.
Files are created u+rw, and directories u+rwx, minus umask restrictions.

  -d, --directory     create a directory, not a file
  -u, --dry-run       do not create anything; merely print a name (unsafe)
  -q, --quiet         suppress diagnostics about file/dir-creation failure
      --suffix=SUFF   append SUFF to TEMPLATE.  SUFF must not contain slash.
                        This option is implied if TEMPLATE does not end in X.
      --tmpdir[=DIR]  interpret TEMPLATE relative to DIR.  If DIR is not
                        specified, use $TMPDIR if set, else /tmp.  With
                        this option, TEMPLATE must not be an absolute name.
                        Unlike with -t, TEMPLATE may contain slashes, but
                        mktemp creates only the final component

  -p DIR              use DIR as a prefix; implies -t [deprecated]
  -t                  interpret TEMPLATE as a single file name component,
                        relative to a directory: $TMPDIR, if set; else the
                        directory specified via -p; else /tmp [deprecated]

      --help     display this help and exit
      --version  output version information and exit

Report mktemp bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'mktemp invocation'

Workaround

So the following workaround works.

transfer() {
# write to output to tmpfile because of progress bar
tmpfile=$( mktemp -t transferXXX )
curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile;
cat $tmpfile;
rm -f $tmpfile;
}

alias transfer=transfer

Originally created by @CalumJEadie on GitHub. # Steps to recreate. Running on Peppermint 4 Linux. ``` $ transfer() { > # write to output to tmpfile because of progress bar > tmpfile=$( mktemp -t transfer ) > curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile > cat $tmpfile > rm -f $tmpfile; > } $ alias transfer=transfer $ transfer /var/log/syslog mktemp: too few X's in template ‘transfer’ -bash: $tmpfile: ambiguous redirect ``` # What's going wrong? In the version of mktemp on Peppermint 4 Linux, template requires at least 3 consecutive XXX's. ``` $ mktemp --help mktemp --help Usage: mktemp [OPTION]... [TEMPLATE] Create a temporary file or directory, safely, and print its name. TEMPLATE must contain at least 3 consecutive 'X's in last component. If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and --tmpdir is implied. Files are created u+rw, and directories u+rwx, minus umask restrictions. -d, --directory create a directory, not a file -u, --dry-run do not create anything; merely print a name (unsafe) -q, --quiet suppress diagnostics about file/dir-creation failure --suffix=SUFF append SUFF to TEMPLATE. SUFF must not contain slash. This option is implied if TEMPLATE does not end in X. --tmpdir[=DIR] interpret TEMPLATE relative to DIR. If DIR is not specified, use $TMPDIR if set, else /tmp. With this option, TEMPLATE must not be an absolute name. Unlike with -t, TEMPLATE may contain slashes, but mktemp creates only the final component -p DIR use DIR as a prefix; implies -t [deprecated] -t interpret TEMPLATE as a single file name component, relative to a directory: $TMPDIR, if set; else the directory specified via -p; else /tmp [deprecated] --help display this help and exit --version output version information and exit Report mktemp bugs to bug-coreutils@gnu.org GNU coreutils home page: <http://www.gnu.org/software/coreutils/> General help using GNU software: <http://www.gnu.org/gethelp/> For complete documentation, run: info coreutils 'mktemp invocation' ``` # Workaround So the following workaround works. transfer() { # write to output to tmpfile because of progress bar tmpfile=$( mktemp -t transferXXX ) curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile; cat $tmpfile; rm -f $tmpfile; } alias transfer=transfer
Author
Owner

@nl5887 commented on GitHub:

Thanks!

@nl5887 commented on GitHub: Thanks!
Author
Owner

@CalumJEadie commented on GitHub:

You're welcome! Thanks for looking into it so quickly!

@CalumJEadie commented on GitHub: You're welcome! Thanks for looking into it so quickly!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dutchcoders/transfer.sh#399