2008-10-05 131 views
3

我写了一个简短的bash脚本来完成一项任务,该任务涉及创建一个临时目录并在其中存储各种文件并对其执行各种操作。访问/ tmp /时拒绝创建临时文件的位置?

在我的第一遍中,我只是在/tmp/$$.$script创建了临时目录“,但后来我在计算机上测试了脚本,在那里我没有对/ tmp /的写入权限,所以我的问题是这个temp目录的好位置在哪里?我应该只使用当前目录吗?主目录?〜/ tmp /?脚本的输出位置?

创建的所有文件都得到清理的脚本退出。

回答

7

许多系统也有一个/var/tmp。如果系统管理员不想让你写入/tmp,想必他们已经提供了一些替代方案......是$TMPDIR环境变量集?举例来说,在我的Mac:

$ echo $TMPDIR 
/var/folders/jf/jfu4pjGtGGGkUuuq8HL7UE+++TI/-Tmp-/ 
+0

不幸的是,这台特定的计算机没有TMPDIR设置,但我想我会添加一个检查作为可能的写入位置。谢谢。 – 2008-10-05 20:22:12

1

你可以尝试/var/tmp,但很可能是/tmp是一个符号链接到(或反之亦然)。

+0

在这种特殊情况下,我确实可以访问/ var/temp,所以这就是我要做的。谢谢。 – 2008-10-05 20:20:04

5

我建议〜/ [脚本名称]/tmp目录,如果没有设置TMPDIR,而不是〜/ tmp目录/的,因为用户可能已经创建了自己。 (并且你可能不想意外地覆盖那里的东西)。

就像一个即兴想在bash -

case $TMPDIR in '') tmp_dir=".${0}/tmp";; *) tmp_dir=$TMPDIR;; esac 
4

使用$ {TMPDIR: -/tmp目录}($ TMPDIR或/ tmp目录,如果$ TMPDIR没有设置)。如果这不是可写的,那么退出时会出现这样的错误,或者要求用户输入定义它。我想问问用户临时文件应该去哪里比假设某个地方更好,如果你的进程被杀死了,就把它们留在那里。

2

你可以尝试使用mktemp(假设它是正确配置的系统)

例如 MYTMPDIR=$(mktemp -d)