Bash脚本如何以全工作目录路径作为输出日志文件名
Bash脚本实现路径斜杠替换的日志命名方法
核心实现逻辑
你只需要先获取当前工作目录的绝对路径,删除开头的根路径斜杠/后,将剩余所有/替换为下划线_,最后拼接.out后缀即可。
方法1:Bash内置参数扩展(推荐,无外部依赖)
直接用Bash原生的变量操作实现,性能最高,无需调用外部命令:
# 第一步:删除当前工作路径开头的/ log_name="${PWD#/}" # 第二步:将所有剩余的/替换为_,拼接.out后缀 log_name="${log_name//\//_}.out"
示例效果:当前路径为/home/usr/dev时,最终生成的文件名为home_usr_dev.out,完全符合你的需求。
方法2:通用命令实现(兼容旧版Shell)
如果你的脚本需要兼容不支持高级参数扩展的旧Shell环境,可以用sed+tr组合实现:
log_name="$(pwd | sed 's/^\///' | tr '/' '_').out"
脚本使用示例
你可以直接在你的业务脚本开头加入上述命名逻辑,后续输出直接写入该文件即可:
#!/bin/bash # 生成日志文件名 log_name="${PWD#/}" log_name="${log_name//\//_}.out" # 后续所有脚本输出都写入该日志文件(包括标准输出和错误输出) exec > "$log_name" 2>&1 # 你的业务逻辑 echo "脚本启动,当前工作目录:$PWD" # 其他命令...
效果验证
你可以先在终端执行以下命令,直接预览生成的文件名是否符合预期:
test_name="${PWD#/}"; echo "${test_name//\//_}.out"
内容的提问来源于stack exchange,提问作者D Patel
相关产品推荐
相关产品推荐

