从文件 - shell脚本中读取值

问题描述:

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

文件的部分是

-- 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脚本我怎样才能得到这些值

任何帮助表示赞赏(任何疑问,请向)

由于

改进case_to_var脚本(用法 “case_to_var文件名”):

输出 case_to_var Jenkinsfile
#!/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 
} 

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 

使输出壳可解析允许其被执行并使用;与此谨慎使用eval

eval $(case_to_var Jenkinsfile) 
echo $default_FEATURES_BRANCH $develop_FEATURES_BRANCH 

输出:

feature-branch master 

一行代码版本:

sed -n '/:$/{s/.* \|://g;h;:foo g;N;y/./_/;s/'"'"'//g;s/ = /=/;s/\n.*env//gp;/break$/!b foo}' Jenkinsfile 
+0

谢谢,你介意后'解释所有其他选项break'。我可以看到你已经删除了'env'和'.' – Richlewis

+0

当变量具有'env'时,它不是独特的,可以被删除。 – agc

+0

当你说小心使用'eval'会不会有更安全的方法?或者这可以吗? – Richlewis