Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 无法为此处文档创建临时文件:设备上没有剩余空间_Shell_Temporary Files - Fatal编程技术网

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

Shell 无法为此处文档创建临时文件:设备上没有剩余空间,shell,temporary-files,Shell,Temporary Files,当POSIX shell脚本在这里使用文档时,会创建一个临时文件。有没有办法控制这些临时文件的创建位置(路径) 我目前正在开发一个Ant脚本,用于在Linux、SunOS、HP-UX和AIX上启动远程POSIX操作系统外壳脚本。脚本使用GNU Autoconf/Automake编译C++源代码。生成的configure脚本本身使用了几个此处文档。如果这些这里的文件< /C>不能在 /VAR/TMP(在SunOS上)创建文件,则失败的配置脚本任务的连锁反应会导致编译失败的二进制文件,这是由于编译C

当POSIX shell脚本在这里使用文档时,会创建一个临时文件。有没有办法控制这些临时文件的创建位置(路径)

我目前正在开发一个Ant脚本,用于在Linux、SunOS、HP-UX和AIX上启动远程
POSIX操作系统外壳脚本
。脚本使用GNU Autoconf/Automake编译
C++源代码。生成的
configure
脚本本身使用了几个
此处文档
。如果这些<代码>这里的文件< /C>不能在 /VAR/TMP(在SunOS上)创建文件,则失败的配置脚本任务的连锁反应会导致编译失败的二进制文件,这是由于编译C++代码失败的结果。(

因此,我可以继续清理
/var/tmp
。但是这些
POSIX服务器
被夜间长时间运行的作业大量使用,这些作业会暂时占用
/var/tmp
空间,然后放弃它,偶尔会导致
设备上没有剩余空间
停机。显然,一些系统管理可以缓解这个问题——增加
/var/tmp
分区

但这不是这里,也不是那里,真的;我想完全消除对其他文件
系统/分区的依赖。我希望我的整个脚本系统是自包含的,这样当远程POSIX平台耗尽少量
/var/tmp/var/tmp
空间的问题对我的Ant系统来说并不重要空间。胡说八道

在完美的POSIX世界中,我应该能够控制位置(路径)被所有shell脚本“here documents”使用,对吗?必须有一种可配置的方法;但我所发现的只是一种使用.exinit文件和
目录=~/tmp
命令来控制“vi”临时空间位置的方法。对于POSIX shell脚本here documents,最初的UNIX不是实现了同样的想法吗

尝试了以下想法;它们没有产生任何影响:

export TEMP=~/tmp
export TMP=~/tmp
要重现此问题,请100%填充/var/tmp(您的POSIX系统可能正在使用/tmp),然后尝试将以下脚本保存到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
带Bash的横幅
banner:

TMPDIR如果设置,bash将其值用作目录名,bash将在其中创建临时文件供shell使用

对于Zsh:

如果您的POSIX外壳没有这样的特性,我所知道的最好的是,通过源代码修改您自己的shell,以读取导出变量的值,如果有效和可写,将其用于临时文件。如果没有,返回默认值。如果您担心它可能出现安全问题,请考虑永久更改。如果您对修改后的shell可能出现的错误或系统故障持保守态度,请考虑将其重命名为另一个二进制文件,例如“代码>/bin /MOSH < /COD>”或“代码> /BI/TESTHS


如果你有一个大内存,你可以考虑安装<代码> TMPFS <代码>到你的代码> /VAR/TMP < /代码>。但是这可能只适用于Linux。我不确定其他系统。Linux的<代码> TMPFS <代码>共享它所使用的内存,即在不使用时,其他程序可以使用它。它非常稳定,并且与交换一起使用时甚至更稳定。

tmpfs
可以有一个指定的大小限制。

顶部只有一个问题;在前两句话中。其余是一些细节,有助于阻止明显的答案,如“rm/var/tmp/*”和“使/VAR/TMP文件系统更大,等等,我不考虑回答我的问题。TMPDIR对我来说是这样,但是出于某种原因,只有我修改了实际的配置脚本,即使我导出了TMPDIR。我认为,由于配置从顶部的“y{!/bin /sH”开始,创建了一个新的shell环境(具有它自己的TMPDIR)。不管出于什么原因,您都必须在configure中显式设置TMPDIR,以便它“接受”,就像导出TMPDIR的父shell从未这样做一样。Wierd,无论如何,我有一个使用TMPDIR的解决方案,所以谢谢!
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'.