bash - 仅按名称列出 Gitlab 运行器

标签 bash awk gitlab-ci-runner

我正在尝试获取仅包含 gitlab 运行者姓名的列表。

所以gitlab-runner list 2>&1的输出是:

Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
default_runner                                      Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230

请注意,运行者的名字中可以包含空格。

所以我尝试了以下方法:

gitlab-runner 列表 2>&1 | awk -F'Executor' '{if(NR>1)print $1}' 这给了我几乎我想要的东西(除了我需要删除的尾随空格)。

default_runner
test runner

但是,如果我将字段分隔符更改为 Executor= 以希望使其更明确,则它不再有效。它返回整行。

$ gitlab-runner list 2>&1 | awk -F'Executor=' '{if(NR>1)print $1}'
default_runner                                      Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230

我试过用 Executor\= 转义它,但无济于事。如何在拆分中包含等号?

编辑:

如果我使用其中一行并将其回显到 awk 中,它会起作用

$ echo "test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230" | awk -F'Executor=' '{print $1}'
test runner

另一件需要注意的事情是,无论出于何种原因,gitlab-runner list 都会打印到 stderr。这就是我在通过管道传输到 awk 之前重定向到 stdout 的原因。也许我没有正确重定向?但这并没有真正意义,因为 awk 在没有等号的情况下选择它。

最佳答案

不能在 Executor= 上拆分的原因当管道从 gitlab-runner命令是因为Executor=字符串不存在!至少不是那种形式 - gitlab-runner添加一些 ANSI color codes (ESC[0;m 用于重置所有属性):

$ gitlab-runner list 2>&1 | cat -A
default_runner                        ^[[0;m  Executor^[[0;m=shell Token=86ab70918fc87c...
#                                     ^^^^^^          ^^^^^^      <--  ANSI color codes

为了证明这一点,尝试运行:

$ gitlab-runner list 2>&1 | awk -F 'Executor\x1b\\[0;m=' '{print $1}'
default_runner

有一个 open proposalgitlab-runner 中添加禁用颜色输出的选项,但它已经开放了 10 个月,没有太多社区支持。在他们决定添加该选项之前,如果您愿意,可以去除 ANSI 颜色代码,例如 this。或 this .


请注意,在 POSIX 中和 GNU awk , -F接受 ERE 表达式。所以,Executor=一般应该可以工作(关于 = 没什么特别的)。要处理空格,可以使用 <space>*Executor= :

$ cmd | awk -F ' *Executor=' 'NR>1 {print $1}' | cat -A
default_runner$
test runner$

关于bash - 仅按名称列出 Gitlab 运行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935757/

相关文章:

gitlab - gitlab-runner 的最低硬件要求

同时为 2 个文件夹编写 Linux bash 脚本

bash 逗号分隔值的倒序

bash - 防止从 Bash 中的源文件执行命令

linux - 解析 shell 脚本中的配置文件

awk - 计算连续点的距离

linux - 来自 shell 输入的文件中的 awk 范围

linux - Bash 引号禁止转义

Gitlab 公共(public)运行程序不会运行 Bower,因为在 sudo 中运行

Docker 列表容器 - Gitlab Runner