“databricks -o json”空数组和“null”之间的输出不一致

问题描述 投票:0回答:1

尝试理解 Bash 中的一些奇怪行为。

我正在使用 CLI 包装器查询 API(databricks api),因此 API 请求通过 CLI 格式的命令发送。我正在使用 Bash 发送这些 CLI 命令。

我的命令中的“-o json”请求获取 JSON 格式的响应。大多数时候,您会得到一个常规的 JSON,就像直接查询 API 一样。然而,有时您会得到一个空响应,CLI 将其作为字符串文字“null”返回。

确切的命令是

databricks jobs list --name MyJobName -o json
。当我在 Mac 上运行它时(指向相同的 API 和相同的作业名称),我得到“null”结果,如下所示:

(base) % JOB_IF_EXISTS=$(databricks jobs list --name "$JOB_NAME" -o json)
(base) % echo "$JOB_IF_EXISTS"
null

但是,当我在 Bash 中运行它时,我得到一个空数组,格式为空格。这意味着我必须将其解析为数组而不是字符串,并且我不能使用标准的“-z”来检查它是否为空。

这就是我的 bash 代码的样子:

# Check if the job exists
echo "Finding job if exists..."
JOB_IF_EXISTS=$(databricks jobs list --name "$JOB_NAME" -o json)
echo "JOB_IF_EXISTS: $JOB_IF_EXISTS"

这就是我的日志中打印的内容:

Finding job if exists...
JOB_IF_EXISTS: [
  
]

谁能解释一下这是怎么回事?我的字符串文字“null”是否被解析为数组?为什么会这样?

shell databricks
1个回答
0
投票

问题原来是

null
输出来自过时的
databricks
版本。更新它会使运行命令在两种环境中返回一个空数组。

在这种情况下,找出设置之间的不同总是一个好主意 - 我假设 Mac 上使用的 shell 是

zsh
而不是
bash
,但这不应该成为一个问题在这种情况下存在差异,因此接下来要检查的显然是产生不同输出的工具的版本。


作为后续操作,要检查 shell 中的 JSON 数组是否为空,我将转向

jq
:

# For bash and zsh, not sh
if [[ "$(jq length <<<"$JOB_IF_EXISTS")" -eq 0 ]]; then
  # do something if non-empty
else
  # do something if empty
fi
© www.soinside.com 2019 - 2024. All rights reserved.