bash - 从管道中的 git 提交消息中删除特殊字符
问题描述
我正在编写 jenkins 管道我需要获取提交消息并从此消息中删除文件名的非法符号
stages {
stage('Get_commit_msg') {
steps {
script {
git_commit_msg= sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()
}
}
}
stage ('3 - Database backup') {
steps {
script {
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "${env.SSH_CONFIG_NAME}",
verbose: true,
transfers: [
sshTransfer(
sourceFiles: "",
removePrefix: "",
remoteDirectory: "",
execTimeout: "1200000",
execCommand:
"""
sudo mysqldump -u ${env.DATABASE_USER} ${env.DATABASE_NAME} --result-file=before_${git_commit_msg}_${env.DATE}.sql
"""
)
]
)
]
)
}
}
}
}
我有一个错误
bash:-c:第 1 行:意外标记附近的语法错误(' bash: -c: line 1:
sudo mysqldump -u root timesheets --result-file=before_Th(is) i#st$e%st m^&*e{}[]ss!age_$( date '+%F').sql' SSH: EXEC: 401 ms 后完成
如果我使用
steps {
script {
sh "git_commit_msg=echo $git_commit_msg | tr -d '[:cntrl:]'"
}
}
}```
get error
/var/jenkins_home/workspace/pipeline@tmp/durable-aded948a/script.sh: line 1: syntax error: unexpected "("
please help
解决方案
tr
可以帮助您用占位符替换所有非字母数字字符:
git_commit_msg = sh(
script: 'git log -1 --pretty=%B ${GIT_COMMIT} | tr -c "[[:alnum:]]" @',
returnStdout: true
).trim()
您可以根据需要对其进行调整:
TR(1) 姓名 tr - 翻译或删除字符 概要 tr [选项]... SET1 [SET2] 描述 翻译、压缩和/或删除标准输入中的字符,写入标准输出。 -c,-C,--补码 使用 SET1 的补码 ... [:铝:] 所有字母和数字 ...
推荐阅读
- angular - Angular - 全屏时未触发 @HostListener('window:keydown.escape', ['$event'])
- python - 浏览器未对大文件发起范围请求
- python - 使用 panda 数据框作为具有两个参数的函数的输入时出现错误消息
- python - 使用云功能在 Cloud Storage 中编写警报策略列表
- docker - LocalStack 卡在“等待所有 LocalStack 服务准备就绪”消息中
- openfeign - 开放的伪装类线程是否保存?(GsonDecoder, OkHttpClient)
- gitlab - 如果外部 url 没有改变,gitlab runners 是否需要在迁移后重新注册?
- node.js - 在 linode 虚拟主机上部署 node js/express web 应用程序
- c# - 编写 DbContext 扩展方法
- .net-core - MSBuild .NET Core 3.1 应用程序 - 在 csproj 中设置 PublishDir 值