我正在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
但是我觉得这太多余了。有没有替代方法,我只能使用一次命令?
答案 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
将运行。