
関連がある場合は、BSD用に作成されたbashスクリプトをLinuxで実行しようとします。今私は次の行にぶら下がっています。
json="$(sudo -u "${vpnUser}" -- curl --interface "${adaptorName}" --get --insecure --silent --show-error --fail --location --max-time "${curlMaxTime}" --data-urlencode "token=${authToken}" "https://${gatewayAddress}:19999/getSignature" | jq -Mre)"
スクリプトの変数値をエコーしましたが、よさそうです。その後、変数を値に置き換えました。それからjqは構文エラー(通常の出力)について文句を言うようですUsage:
、私の考えではカールが(23) Failed writing body
。コマンドを実行すると、sudo -u ... | jq -Mre
JSONファイルのように見える内容が印刷されます。
答え1
問題はjq
1.6より前のバージョンではフィルターランニング。最も単純なフィルタは、入力と同じ出力を生成するIDフィルタです。これはから単一点として作成されますjq
。
コードを機能させるには:
json=$( ... | jq -r -e . )
一緒に使用するオプションは次のとおりですjq
。
このオプションは、無色の出力が要求されることを除いてと同じ
-M
です。--monochrome-output
これはjq
端末に書き込まないときのデフォルト値なので、このオプションは削除される可能性が高いです。この
-r
オプションはと同じです--raw-output
。jq
出力時一行(文字列を含むJSON構造ではありません)文字列がデコードされます。これは、出力文字列が引用されず、拡張など\n
の特殊文字シーケンスを含むことを意味します。このオプションは\t
\"
いいえ入力がjq
デコードする必要があるJSONエンコーディング文字列のセットである場合、これは削除されます。この
-e
オプションはと同じです--exit-status
。このオプションを使用すると、jq
終了の終了状態が最後に評価された値を反映します。これは、コマンドが次のように終了することを意味します。失敗する最終結果がnull
またはfalse
。シェルオプションが有効な状態でスクリプトがerrexit
実行されると、ここではゼロ以外の終了状態のためにjq
スクリプトが終了します。つまり、コマンドが発生するスクリプトについて詳しく知らない限り、このオプションを削除することはできません。
jq
私はここで使用するだけでcurl
結果をきれいに印刷していると思います。原作者が実際には考えずにどこかでこれらの3つのオプションをコピーした可能性がありますが(含まれている項目でこれがわかります)、スクリプトを終了するために終了ステータスに依存している可能性が-M
あります。jq
答え2
それは重要ではありません!アイリッシュコーヒーのカップとjq
いくつかの研究を終えた後、著者が基本的に読みやすい複数行の出力にフォーマットする以外に、データに対して何もしないパーサーを介して出力をパイプする理由が疑問に思います。 help以下の内容をすべて削除してください|
。