如何创build一个临时目录?

我用来创build一个tempfile ,删除它,并重新创build一个目录:

 tmpnam=`tempfile` rm -f $tmpnam mkdir "$tmpnam" 

问题是,如果在一个进程rm -f Xmkdir X之前偶然执行tempfile,另一个进程可能会得到相同的名称X

使用mktemp -d 。 它创build一个随机名称的临时目录,并确保该文件不存在。 你需要记住在使用它之后删除目录。

我最喜欢的单线是这个

 cd $(mktemp -d) 

对于更强大的解决scheme,我使用类似于以下内容。 这样,临时目录将永远在脚本退出后被删除。

清除function在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 ... 

这里的bash脚本目录。

Bash 陷阱 。