仅按名称列出 Gitlab 运行者

Ric*_*kwa 5 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
Run Code Online (Sandbox Code Playgroud)

请注意,跑步者的姓名中可以包含空格。

所以我尝试了以下方法:

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

default_runner
test runner
Run Code Online (Sandbox Code Playgroud)

但是,如果我将字段分隔符更改为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
Run Code Online (Sandbox Code Playgroud)

我尝试过逃避它,但Executor\=没有成功。如何在分割中包含等号?

编辑:

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

$ echo "test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230" | awk -F'Executor=' '{print $1}'
test runner
Run Code Online (Sandbox Code Playgroud)

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

ran*_*mir 2

Executor=从命令进行管道传输时无法拆分的原因gitlab-runner因为Executor=字符串不存在!至少不是那种形式 -gitlab-runner添加一些ANSI 颜色代码ESC[0;m用于重置所有属性):

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

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

$ gitlab-runner list 2>&1 | awk -F 'Executor\x1b\\[0;m=' '{print $1}'
default_runner
Run Code Online (Sandbox Code Playgroud)

有一个公开提案,要求在 中添加一个禁用颜色输出的选项gitlab-runner,但它已经开放 10 个月了,没有太多社区支持。在他们决定添加该选项之前,如果您愿意,您可以删除 ANSI 颜色代码,例如像这样这样


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

$ cmd | awk -F ' *Executor=' 'NR>1 {print $1}' | cat -A
default_runner$
test runner$
Run Code Online (Sandbox Code Playgroud)