2017-12-21 53 views
0

Wade Wegner의 가이드 here을 기반으로 Salesforce의 DX CLI에 대한 ohmyzsh 기능을 만들려고합니다. 원하는 가치를 얻으려면 내가 전에 들어 본 적이없는 JQ을 어떻게 사용하고 있는지를 확장해야합니다. 이 유스 케이스에 대한 전제를 얻었지만 하나의 추상화 포인트 (aliasConfig json 내)로 고민하고 있습니다. 가되도록 ${defaultusername} 내가이 경우의 값을 알고 사용변수 값을 기반으로 JQ 가져 오기

{ 
    "orgs": { 
     "HubOrg": "[email protected]",   
     "my-scrath-org": "[email protected]" 
    } 
} 

"[email protected]"여기 내 스크립트

get_sfdx_defaultusername() { 
    config="$(cat .sfdx/sfdx-config.json 2> /dev/null)"; 
    globalConfig="$(cat ~/.sfdx/sfdx-config.json)"; 
    aliasConfig="$(cat ~/.sfdx/alias.json)"; 

    defaultusername="$(echo ${config} | jq -r .defaultusername)" 
    defaultusernamealias="NEED HELP HERE" 
    globaldefaultusername="$(echo ${globalConfig} | jq -r .defaultusername)" 

    if [ ! $defaultusernamealias = "null" ] 
    then 
     echoString=$echoString$defaultusernamealias"$txtylw (alias)" 
    elif [ ! $defaultusername = "null" ] 
    then 
     echoString=$echoString$defaultusername"$txtylw (local)" 
    else 
     echoString=$echoString$globaldefaultusername"$txtylw (global)" 
    fi 
    echo $echoString"\n" 
} 

alias.json은 다음과 같습니다 지금까지의 따라서 defaultusernamealias의 값을 "my-scrath-org"로 설정해야합니다.

참고 : 가장 가까운 대답은 이지만 불행히도 나는 그걸로 내가 필요한 것을 얻을 수 없었습니다. 경우 사람에 enter image description here

이를 사용하거나 기여에 관심이 :

get_sfdx_defaultusername() { 
    config="$(cat .sfdx/sfdx-config.json 2> /dev/null)"; 
    globalConfig="$(cat ~/.sfdx/sfdx-config.json)"; 
    aliasConfig="$(cat ~/.sfdx/alias.json)"; 

    defaultusername="$(echo ${config} | jq -r .defaultusername)" 
    defaultusernamealias="$(echo ${aliasConfig} | jq -r '.orgs | to_entries[] | select(.value =="'$defaultusername'").key')" 
    globaldefaultusername="$(echo ${globalConfig} | jq -r .defaultusername)" 

    if [ ! $defaultusernamealias = "null" ] 
    then 
     echoString=$echoString$defaultusernamealias"$txtylw (alias)" 
    elif [ ! $defaultusername = "null" ] 
    then 
     echoString=$echoString$defaultusername"$txtylw (local)" 
    else 
     echoString=$echoString$globaldefaultusername"$txtylw (global)" 
    fi 
    echo $echoString"\n" 
} 

이 날과 같이 내 현재하여 DefaultUserName 조직을 표시 할 수 있습니다 :

답변

2

to_entries 사용 방법을 알아 낸 축하합니다.

작은 제안 중 하나는 jq 프로그램을 "구성"하기 위해 쉘 보간을 사용하지 않는 것입니다. 원하는 목표를 달성하는 훨씬 더 좋은 방법은 명령 행에서 관련 값을 전달하는 것입니다. 귀하의 경우에는, 다음이 적절할 것 :

$ jq --arg username "$defaultusername" ' 
    .orgs | to_entries[] | select(.value == $username).key' 

또 다른 작은 점은 STDIN에 JSON을 보낼 echo을 사용하지 않도록하는 것입니다. 몇 가지 가능성이 패턴을 포함한 있습니다

  • 당신이 bash에 사용하는 경우 : 귀하의 경우 jq .... <<< "$JSON"
  • 사용 printf "%s" "$JSON" | jq ...
  • jq -n --argjson JSON "$JSON" '$JSON | ...'

를, 이러한 대안의 마지막은 같을 것이다 :

$ jq --arg username "$defaultusername" --argjson JSON "$aliasConfig" ' 
    $JSON 
    | .orgs | to_entries[] | select(.value == $username).key' 
+0

감사합니다. 첫 번째 제안을 문제없이 구현할 수있었습니다. 두 번째 재 작성 방법을 보여줄 수 있습니까? 나는 현재'sh'을 사용하고 있지만 이것을 시도하는 누군가가'.bash' 버전을 필요로한다고 생각합니다. – Xtremefaith

+0

오타가 수정되고 정교합니다. – peak