Shell脚本创建含当前日期的目录失败,求可行解决方案
创建带日期的目录失败?试试这些排查方案!
我最近在写脚本,想创建一个包含当前日期的新目录,但执行后一直失败,实在搞不定了,来求助大家!我的脚本代码如下:
export currentDate=$(date +%d-%b-%Y) cd /mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/ sudo mkdir /mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/$currentDate
我已经查过一些关于mkdir命令权限、路径相关的资料,但还是没解决问题,有没有大佬能帮我分析下原因,给个可行的解决方案?
可能的问题点及解决办法
- 环境变量在sudo下无法直接继承:默认情况下,
sudo不会传递当前用户的环境变量,所以$currentDate在sudo mkdir命令里可能是空值或者未被识别。可以试试两种解决方式:# 方案1:直接在sudo命令内生成日期,避免依赖环境变量 sudo mkdir "/mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/$(date +%d-%b-%Y)" # 方案2:用-E参数让sudo保留当前用户的环境变量 export currentDate=$(date +%d-%b-%Y) sudo -E mkdir "/mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/$currentDate" - 路径未加引号导致解析错误:虽然当前路径没有空格,但养成给路径加双引号的习惯能避免后续路径变化时出现字符解析问题,比如上面代码里用双引号包裹完整路径。
- 父目录权限不足:即使使用
sudo,也要确保父目录/mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/对root用户有写权限。先检查权限:
如果root没有写权限,先修改权限:ls -ld /mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/sudo chmod 755 /mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/ - 日期格式的区域设置问题:
date +%d-%b-%Y中的%b是月份缩写(如Jan/Feb),这依赖系统区域设置。如果系统不是英文区域,可能生成带特殊字符的月份名导致路径无效,可以强制指定英文区域:export currentDate=$(LC_ALL=en_US.UTF-8 date +%d-%b-%Y) sudo -E mkdir "/mnt/volume-blr1-01/Jenkins/workspace/WebHook_Log_Backup/$currentDate"
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

