執行此命令我最終得到 'null':
oauth_token=$(curl -kls \
--header "Authorization: Bearer $TFE_TOKEN" \
--header "Content-Type: application/vnd.api json" \
--request GET $HOST/api/v2/organizations/$ORGANIZATION/oauth-clients | jq -r ".data[] | select(.attributes.name == \"$1\") | .relationships.\"oauth-tokens\".data[0].id")
info "oauth token is: $oauth_token"
if [[ -z $oauth_token ]]; then
warn "Connection to VSC was not successful as oauth_token is null."
exit 0
fi
日志輸出是這樣的:
[INFO] Showing oauth token of myuser...
[INFO] oauth token is: null
null
null
[INFO] Setting oauth token as env variable)
為什么在這種情況下“if”子句不起作用?
uj5u.com熱心網友回復:
使用@tsv武力jq -r輸出為空字串null值:
#!/bin/bash
get_oauth_clients() {
curl -kls \
--header "Authorization: Bearer $TFE_TOKEN" \
--header "Content-Type: application/vnd.api json" \
--request GET \
"$HOST/api/v2/organizations/$ORGANIZATION/oauth-clients"
}
IFS=$'\t' read -r oauth_token < <(
get_oauth_clients |
jq -r --arg ATTNAME "$1" '
.data[]
| select(.attributes.name == ATTNAME)
| [ .relationships."oauth-tokens".data[0].id" ]
| @tsv'
)
info "escaped oauth token is: $oauth_token"
printf -v oauth_token '%b' "$oauth_token" # unescape oauth_token
info "oauth token is: $oauth_token"
if [ -z "$oauth_token" ]
then
warn "Connection to VSC was not successful as oauth_token is null."
exit 0
fi
需要注意的幾點:
您可能會考慮將復雜的
curl | jq命令包裝在一個函式中。將 shell 變數
jq作為引數傳遞而不是在查詢中擴展它們更安全。請參閱將bash 變數傳遞給 jq。using
read在這里不是強制性的,但是當您想使用jq -r '[...]|@tsv.TSV 值可能會被轉義;你需要逃避他們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/373051.html
