2017-08-16 9 views
1

Hey私は、conduit curlメソッドを使用してポストからタスクを作成しています。ハードコードされた値を持つ端末から実行するとうまく動作します。しかし、私は、変数とそれを実行しようとすると、エラーがスローされます。curlの変数をbashスクリプトで解析する

スクリプト:

#!/bin/bash 
echo "$1" 
echo "$2" 
echo "$3" 
echo "$4" 
echo "$5" 
echo '{ 
    "transactions": [ 
    { 
     "type": "title", 
     "value": "$1" 
    }, 
    { 
     "type": "description", 
     "value": "$2" 
    }, 
    { 
     "type": "status", 
     "value": "$3" 
    }, 
    { 
     "type": "priority", 
     "value": "$4" 
    }, 
    { 
     "type": "owner", 
     "value": "$5" 
    } 
    ] 
}' | arc call-conduit --conduit-uri https://mydomain.phacility.com/ --conduit-token mytoken maniphest.edit 

が実行:

./test.sh "test003 ticket from api post" "for testing" "open" "high" "ahsan" 

出力:

test003 ticket from api post 
for testing 
open 
high 
ahsan 
{"error":"ERR-CONDUIT-CORE","errorMessage":"ERR-CONDUIT-CORE: Validation errors:\n - User \"$5\" is not a valid user.\n - Task priority \"$4\" is not a valid task priority. Use a priority keyword to choose a task priority: unbreak, very, high, kinda, triage, normal, low, wish.","response":null} 

あなたが見ることができるように$ 4と$ 5の値を変数ではなく値として誤って読み込みます。そして、これらの引数で$変数を入力として使用する方法を理解できません。

答えて

1

echoの前後に一重引用符を使用しているため、JSON内で二重引用符を使用できますが、echoは何も展開せずに文字列を印刷します。文字列には二重引用符を使用する必要があるため、その内部の二重引用符をエスケープする必要があります。

はこれで最後echo置き換えます

echo "{ 
    \"transactions\": [ 
    { 
     \"type\": \"title\", 
     \"value\": \"$1\" 
    }, 
    { 
     \"type\": \"description\", 
     \"value\": \"$2\" 
    }, 
    { 
     \"type\": \"status\", 
     \"value\": \"$3\" 
    }, 
    { 
     \"type\": \"priority\", 
     \"value\": \"$4\" 
    }, 
    { 
     \"type\": \"owner\", 
     \"value\": \"$5\" 
    } 
    ] 
}" 

をし、それがうまくいきます。このような問題を避けるには、bash初心者向けのヒントについては、http://wiki.bash-hackers.orghttp://mywiki.wooledge.org/BashGuideを確認してください。また、多くのテキストエディタでshellcheckを使用すると、このようなエラーが自動的に検出されます。

関連する問題