首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用shell脚本从文件中读取值

使用shell脚本从文件中读取值
EN

Stack Overflow用户
提问于 2017-04-06 11:25:42
回答 1查看 153关注 0票数 0

我有一个Jenkinsfile,我想从一个shell脚本中读取一些值。

文件的部分是

代码语言:javascript
复制
-- Jenkinsfile
stage ('Setup Vars') {
  switch(BRANCH_NAME) {
    case 'develop':
      env.ECHO_CHAMBER_BRANCH = 'develop'
      env.HENDRICKS_JS_INTEGRATION_BRANCH = 'master'
      env.FEATURES_BRANCH = 'master'
    break
    case 'master':
      env.ECHO_CHAMBER_BRANCH = 'develop'
      env.HENDRICKS_JS_INTEGRATION_BRANCH = 'master'
      env.FEATURES_BRANCH = 'master'
    break
    default:
      env.ECHO_CHAMBER_BRANCH = 'feature-branch'
      env.HENDRICKS_JS_INTEGRATION_BRANCH = 'feature-branch'
      env.FEATURES_BRANCH = 'feature-branch'
    break
  }
}

我需要在case语句的默认部分中读取分配给env.ECHO_CHAMBER_BRANCHenv.HENDRICKS_JS_INTEGRATIONenv.FEATURES_BRANCH的值,因此在这个示例中,我希望为每个变量返回feature-branch

使用shell脚本,如何获得这些值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-06 14:28:10

改进的case_to_var脚本(使用"case_to_var文件名“):

代码语言:javascript
复制
#!/bin/sed -nf
# Only look at lines ending in ':'
/:$/{
    # remove leading `case`, spaces, and the ':', and save name.
    s/.* \|://g
    h
    # until the `break` line, recall name, append variable name, 
    # and make it shell-parsable.
    :foo g
        N
        y/./_/
        s/'//g
        s/ = /=/
        s/\n.*env//gp
        /break$/!b foo
}

case_to_var Jenkinsfile输出

代码语言:javascript
复制
develop_ECHO_CHAMBER_BRANCH=develop
develop_HENDRICKS_JS_INTEGRATION_BRANCH=master
develop_FEATURES_BRANCH=master
master_ECHO_CHAMBER_BRANCH=develop
master_HENDRICKS_JS_INTEGRATION_BRANCH=master
master_FEATURES_BRANCH=master
default_ECHO_CHAMBER_BRANCH=feature-branch
default_HENDRICKS_JS_INTEGRATION_BRANCH=feature-branch
default_FEATURES_BRANCH=feature-branch

使输出shell可解析,允许执行和使用它;与谨慎使用eval一样

代码语言:javascript
复制
eval $(case_to_var Jenkinsfile)
echo $default_FEATURES_BRANCH $develop_FEATURES_BRANCH

输出:

代码语言:javascript
复制
feature-branch master

一条龙版本:

代码语言:javascript
复制
sed -n '/:$/{s/.* \|://g;h;:foo g;N;y/./_/;s/'"'"'//g;s/ = /=/;s/\n.*env//gp;/break$/!b foo}' Jenkinsfile
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43253811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档