无法为此文档创建临时文件:设备上没有剩余空间

时间:2014-08-12 06:03:29

标签: shell temporary-files

当POSIX shell脚本使用here documents时,会创建一个临时文件。有没有办法环境控制WHERE(路径)这些临时文件是否被创建?

我目前正在开发一个启动远程POSIX operating system shell scripts on Linux, SunOS, HP-UX and AIX的Ant脚本。脚本编译C++ source code using GNU Autoconf/Automake。生成的configure脚本本身使用了多个here documents。如果here documents中的任何一个无法在/var/tmp(在SunOS上)创建文件,则由于尝试编译C ++代码失败而导致配置脚本任务失败的连锁反应导致丢失二进制文件。 : - (

所以,我可以继续清理/var/tmp。但是这些POSIX servers被夜间长期工作大量使用,暂时占用/var/tmp空间然后放弃,偶尔会导致No space left on device次中断。显然,一些系统管理可以缓解这个问题 - 或许增长/var/tmp分区。

但这不是在这里,也不在那里,真的;我想删除对其他文件systems/partitions entirely的依赖。我希望我的整个脚本系统都是自包含的,因此当远程POSIX平台耗尽少量/var/tmp空间时,/var/tmp空间的打嗝对我的Ant系统无关紧要。无义。

在一个完美的POSIX世界中,我应该能够控制所有shell脚本使用的位置(路径)' here documents'对?必须有一种可配置的方式;但我发现的是一种控制“vi”的位置的方法。使用带有directory=~/tmp命令的.exinit文件的临时空间。原来的UNIX诸神为这里的POSIX shell脚本文件实现了同样的想法吗?

尝试了以下想法;他们没有什么区别:

export TEMP=~/tmp
export TMP=~/tmp

要重现此问题,请填写/ var / tmp(您的POSIX系统可能正在使用/ tmp)100%,然后尝试将以下脚本保存到 tst.sh 。然后使用 chmod + x tst.sh 使其可执行。然后在shell提示符下输入 tst.sh ,当然。

banner <<zzz23EndOfMessagezzz23
E-mail your noontime orders for pizza to the system administrator.
    (Add an extra dollar for anchovy or mushroom topping.)
zzz23EndOfMessagezzz23

感谢提前大师的任何线索!

1 个答案:

答案 0 :(得分:1)

使用Bash:

  

TMPDIR如果设置,bash使用其值作为bash为shell使用创建临时文件的目录名。

使用Zsh:

TMPPREFIX  A pathname prefix which the shell will use for all temporary files.  Note that this should include an initial part for
           the file name as well as any directory names.  The default is `/tmp/zsh'.

如果你的POSIX shell没有这样的功能,我知道的最好的事情是你通过源代码修改自己的shell来读取导出变量的值,如果有效和可写,则将其用于临时文件。如果没有,请返回默认值。如果您担心可能存在安全问题,请考虑将更改永久化。如果您对修改后的shell可能出现的错误或系统故障保守,请考虑将其重命名为另一个二进制文件,例如: /bin/modsh/bin/testsh

如果您的内存很大,可以考虑将tmpfs挂载到/var/tmp,但这可能仅适用于Linux。我不确定其他系统。 Linux的tmpfs共享它使用的内存,即不使用时,其他程序可以使用它。它非常稳定,如果与交换一起使用则更稳定。 tmpfs可以指定大小限制。