我用来创建 tempfile
,将其删除并重新创建为目录:
temp=`tempfile`
rm -f $temp
# <breakpoint>
mkdir $temp
问题是,当它运行到
对于更强大的解决方案,我使用如下内容。这样脚本退出后临时目录将始终被删除。
清理函数在 EXIT
信号上执行。这保证了清理函数总是被调用,即使脚本在某处中止。
#!/bin/bash
# the directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# the temp directory used, within $DIR
# omit the -p parameter to create a temporal directory in the default location
WORK_DIR=`mktemp -d -p "$DIR"`
# check if tmp dir was created
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
echo "Could not create temp dir"
exit 1
fi
# deletes the temp directory
function cleanup {
rm -rf "$WORK_DIR"
echo "Deleted temp working directory $WORK_DIR"
}
# register the cleanup function to be called on the EXIT signal
trap cleanup EXIT
# implementation of script starts here
...
here 中的 bash 脚本目录。
重击 traps。
cleanup
将 rm -rf 您的当前目录!
mktemp
失败,WORK_DIR
将为空,这意味着命令将只是 rm -rf
没有参数。我不使用 FreeBSD,但如果 rm -rf
等同于 rm -rf .
,我会感到非常惊讶
TMPWORKDIR=$(basename 'mktemp -d -p /tmp/git/')
然后 2. rmdir /tmp/git/"${TMPWORKDIR}"
。如果变量现在为空,您仍将退回到 /tmp/git/
而不是整个系统。在答案中考虑这样的事情,我很乐意同意。 ;)
我最喜欢的单线是
cd $(mktemp -d)
rm $(pwd)
? :P
pushd $(mktemp -d)
... popd
rm -r $(pwd)
rm -r $(pwd)
。考虑临时目录创建因任何原因失败的可能性(可能 /tmp 文件系统已满或由于错误已重新以只读方式挂载?);然后 cd $(mktemp -d)
将评估为 cd
更改用户的主目录,随后将被删除。
if pushd $(mktemp -d || echo BADMPDIR); then ........ ; rm -r $(pwd); popd; fi
可能是安全的
以下代码段将安全地创建并清理临时目录。
当接收到任何指定的信号时,第一行 trap
执行 exit 1
命令。第二行 trap
删除程序退出时的 $TEMPD
(正常和异常)。我们在检查 mkdir -d
成功后初始化这些陷阱,以避免意外执行退出陷阱,$TEMPD
处于未知状态。
#!/bin/bash
# set -x # un-comment to see what's going on when you run the script
# Create a temporary directory and store its name in a variable.
TEMPD=$(mktemp -d)
# Exit if the temp directory wasn't created successfully.
if [ ! -e "$TEMPD" ]; then
>&2 echo "Failed to create temp directory"
exit 1
fi
# Make sure the temp directory gets removed on script exit.
trap "exit 1" HUP INT PIPE QUIT TERM
trap 'rm -rf "$TEMPD"' EXIT
-d
检查目录。 2.) 终止已经是这些信号的默认设置。
这是关于如何使用模板创建临时目录的简单说明。
安全地创建一个临时文件或目录,并打印其名称。模板必须在最后一个组件中包含至少 3 个连续的“X”。如果没有指定 TEMPLATE,它将使用 tmp.XXXXXXXXX 创建的目录为 u+rwx,减去 umask 限制。
PARENT_DIR=./temp_dirs # (optional) specify a dir for your tempdirs
mkdir $PARENT_DIR
TEMPLATE_PREFIX='tmp' # prefix of your new tempdir template
TEMPLATE_RANDOM='XXXX' # Increase the Xs for more random characters
TEMPLATE=${PARENT_DIR}/${TEMPLATE_PREFIX}.${TEMPLATE_RANDOM}
# create the tempdir using your custom $TEMPLATE, which may include
# a path such as a parent dir, and assign the new path to a var
NEW_TEMP_DIR_PATH=$(mktemp -d $TEMPLATE)
echo $NEW_TEMP_DIR_PATH
# create the tempdir in parent dir, using default template
# 'tmp.XXXXXXXXXX' and assign the new path to a var
NEW_TEMP_DIR_PATH=$(mktemp -p $PARENT_DIR)
echo $NEW_TEMP_DIR_PATH
# create a tempdir in your systems default tmp path e.g. /tmp
# using the default template 'tmp.XXXXXXXXXX' and assign path to var
NEW_TEMP_DIR_PATH=$(mktemp -d)
echo $NEW_TEMP_DIR_PATH
# Do whatever you want with your generated temp dir and var holding its path
mktemp -d -t <prefix>