詹金斯的 shell 脚本

詹金斯的 shell 脚本

我的詹金斯环境变量$SVN_URLhttp://project/svn/neslrepo/trunk/java_project.我想java_project通过 shell 脚本提取并存储在变量中。

我试过:

job_name=(echo $SVN_URL | awk -F "/" '{print $NF}')
echo $job_name.war

我预计输出是java_project.war,但它不起作用。我究竟做错了什么?

答案1

贝壳已经提供一些不错的工具可以做到这一点,不需要外部命令:

$ SVN_URL="http://project/svn/neslrepo/trunk/java_project"
$ echo ${SVN_URL##*/} 
java_project

所以你需要的是:

job_name=${SVN_URL##*/}.war

答案2

basename尽管参数是 HTTP URL 而不是文件系统路径,但似乎也可以做到这一点。

echo $(basename "http://project/svn/neslrepo/trunk/java_project/").war
java_project.war

由于手册页没有提及 HTTP URL,这可能是对basename.这似乎是 HTTP URL 和文件系统路径之间结构相似性的副作用。man 3 basename说(强调我的):

函数 dirname() 和 basename() 将空终止的路径名字符串分解为目录和文件名部分。在通常情况下,dirname() 返回字符串直到但不包括最后的“/”,并且basename() 返回最后一个“/”之后的组件。尾随“/”字符不计为路径名的一部分。

答案3

我尝试了以下两种方法,效果很好

Method1

@praveen_linux_example ~]# SVN_URL=http://project/svn/neslrepo/trunk/java_project
[root@praveen_linux_example ~]# jobname=`echo $SVN_URL| awk -F "/" '{print $NF}'`
[root@praveen_linux_example ~]# echo $jobname.war
java_project.war
======================================================================================================
Method 2

 SVN_URL=http://project/svn/neslrepo/trunk/java_project
@praveen_linux_example ~]# echo $SVN_URL| sed "s/.*\///"| sed "s/$/.war/"
java_project.war

答案4

问题出在你的job_name=(echo $SVN_URL | awk -F "/" '{print $NF}')线路上。

您正在尝试使用命令替换但是,您已经忘记了$

为了使 bash 执行括号中的命令,应该如下所示:

job_name=$(echo $SVN_URL | awk -F "/" '{print $NF}')

以下代码片段非常适合我:

#!/bin/bash

SVN_URL="http://project/svn/neslrepo/trunk/java_project"

job_name=$(echo $SVN_URL | awk -F '/' '{print $NF}')
echo $job_name.war

相关内容