2017-01-20 8 views
0

多くの関連記事がありますが、何も私の問題を解決できませんでした。私はbashスクリプトでCURLコマンドを持っています。 Data要素にはSQLコマンドが含まれています。 SQLコマンドには、単一引用符で囲む必要のあるパラメータが含まれています。したがって、次のようになります。bashスクリプトの一重引用符curlコマンドは二重引用符に変換され続けます

jsonData=$(curl --request POST \ 
     --url $uribase/Redrock/Query \ 
     --header 'content-type: application/json' \ 
     --header 'X-NATIVE-CLIENT: 1' \   
     --data '{"Script":"'"Select Server.ID, Server.ComputerClass, Server.FQDN, Server.Name, Server.SessionType from Server WHERE Server.ComputerClass='Unix' COLLATE NOCASE"'"}') 

Server.ComputerClassの値を無駄にすると非常に多くの変形を試みました。私は= 'Unix'に解決することはできません。ユニコードも試みました。 助けていただければ幸いです。

+0

多分エスケープしようとします(例えば、\ 'Unix \' ')... –

+0

ありがとう、デバッグ出力:... Server.ComputerClass = \ '\' 'Unix \' \ '' ... – Tony

+1

Canあなたはあなたの最終的な文字列がどのように見えているのかを示しますか? –

答えて

0

正しく引用するのではなく、標準入力からここの文書からcurlにフィードしてください。配列を使用すると、オプションをよりきれいに整理することができます。

curl_opts=(--request POST 
      --url "$uribase/Redrock/Query" 
      --header 'content-type: application/json' 
      --header 'X-NATIVE-CLIENT: 1' 
      --data @- 
     ) 

@-は、標準入力のためのcurl -defined別名である-という名前のファイルからデータを読み取るためにcurlに指示します。

jsonData=$(curl "${curl_opts[@]}" <<EOF 
{ "Script": "Select Server.ID, Server.ComputerClass, Server.FQDN, Server.Name, Server.SessionType from Server WHERE Server.ComputerClass='Unix' COLLATE NOCASE"} 
EOF 
) 
+0

上記のおかげで残念ながらすべてのオプションが失敗します。 @chepnerはあなたのメソッドを試してみました。POSTで送信されたリクエストボディ(curl --trace-ascii経由)を見ると、Server.ComputerClassの値がmungedされていることがわかります。 (0x9e) 0000:{"スクリプト": "Server.ID、Server.ComputerClass、Server.FQDN、 0040を選択:サーバーからServer.Name、Server.SessionType Server.Compute 0080:rClass = '\' ' Unix '\' 'COLLATE NOCASE "} – Tony

+0

これらの問題は...? – chepner

+0

送信が遅すぎます。上の記事の全コメント。 – Tony

0

クォートが混乱を招きます。はい、文を格納するためにファイルを使用すると動作します。あなたがそれをやりたくないのなら、ここであなたが試みることができるものがあります。

関数を作成します:

sql_request() 
{ 
    printf "'{" 
    printf '"Script"' 
    ... 
} 

あなたは一般的なアイデアを得る:必要な数の作品にそれを打破します。単一引用符を二重引用符で囲む必要がある場合は、二重引用符が必要なときは一重引用符で囲みます。

、必要に応じて、あなたの要求を取得するには、その関数を呼び出すことができます。

"$(sql_request)" 

あなたも簡単に文字列の部分を変更するには、この関数に引数を養うことができます。

関連する問題