如果输出不为null,则打印命令的输出,否则回显无输出

时间:2019-11-28 19:50:09

标签: bash

我正在bash中运行命令。我只想运行一次命令。

如果命令有输出,请打印输出。但是,如果没有输出,请回显类似No output

的内容

我的命令是

gcloud projects get-iam-policy sap-development  --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members: user:some@email.com"

如果有结果,它将打印输出。如果没有结果,则输出中不打印任何内容。

我可以做类似的事情

if [[ $(gcloud projects get-iam-policy <PROJECT>  --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members: user:some@email.com" ) ]] 
then
    gcloud projects get-iam-policy <PROJECT>  --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members: user:some@email.com"
else
    echo "No permissions found"
fi

但是我觉得这太多余了。有没有替代方法,我只能使用一次命令?

2 个答案:

答案 0 :(得分:1)

if output=$(something); [[ $output ]]; then
  printf '%s\n' "$output"  ## less-buggy alternative to echo "$output"
else
  echo "Nope"
fi

答案 1 :(得分:0)

另一个选择:

gcloud ... | { grep '.*' || echo "No output"; }

它是如何工作的:grep匹配并打印通过管道获得的所有内容;如果找不到任何东西,则会退出并显示失败状态,在这种情况下,echo将运行。