使用mktemp -d无法创建临时目录,执行cd $(mktemp -d)跳转至主目录
mktemp -d 创建临时目录失败(退出码248)的原因分析
核心现象关联解释
首先明确两个关键现象的逻辑:
- 执行
cd $(mktemp -d)跳转到主目录,是因为mktemp -d失败时没有输出任何内容,导致$(...)展开为空字符串,而cd命令不带参数时默认跳转至当前用户主目录。 - 退出码248说明
mktemp执行过程中触发了特定错误,具体原因可从以下方向排查:
具体排查方向
临时目录父路径权限/可用性问题
mktemp默认在/tmp目录下创建临时文件夹(若未通过TMPDIR环境变量指定其他路径)。需检查:- 执行
echo $TMPDIR,确认是否被设置到无写入权限的目录; - 执行
ls -ld /tmp,正常权限应为drwxrwxrwt,若权限不足(比如缺少其他用户的写入/执行权限),普通用户无法在其中创建目录; - 检查
/tmp所在磁盘的空间和inode使用情况:df -h /tmp(空间)、df -i /tmp(inode),任一耗尽都会导致无法创建新目录。
- 执行
模板格式错误(自定义模板场景)
若手动指定了创建模板(比如mktemp -d mytmp.XXX),模板中必须包含至少3个X用于生成唯一随机字符,数量不足会导致mktemp无法生成合法的唯一目录名,触发失败。系统mktemp实现的特定错误码
部分Linux发行版或类Unix系统的mktemp会用自定义退出码标识错误,248通常对应「无法创建指定路径的目录」。可执行man mktemp查看本地系统的退出码说明,确认具体错误类型。
快速验证步骤
- 手动指定标准模板测试:
mktemp -d /tmp/test_temp.XXXXXX,若成功则说明原默认路径或模板存在问题; - 临时指定TMPDIR到用户可写目录测试:
TMPDIR=~/tmp mktemp -d(需先确保~/tmp存在且权限合法),若成功则原TMPDIR或/tmp存在问题。
内容的提问来源于stack exchange,提问作者physio
相关产品推荐
相关产品推荐

