カール:オプション--connect-timeout:正しい数値引数が必要です。

カール:オプション--connect-timeout:正しい数値引数が必要です。

修正する:これはバグでバージョン7.87.0で修正されました。https://github.com/curl/curl/commit/975efec61b83b840cf18ab2ee23b9202c60ca8a7

許可された回答は以前のバージョンでも機能しますが、自動アップグレード後もスクリプトが機能するようにアップグレードすることをお勧めします。


curl私の箱の2つに問題があります。約24のLinuxインストールからcurl --connect-timeout

コマンド例は、2台のcurl --connect-timeout 3.14 https://example.comマイコンピュータ(私の唯一のデスクトップ)でのみ失敗します。私の唯一のKubuntuのインストール。残りは主にUbuntu ServerといくつかのDebianインストールで、どちらもヘッドレスです。

これら2つのKubuntuデスクトップバージョンは異なります。 1つはアップグレードされたバージョン22.04 LTS、もう1つは20.04 LTSバージョンです。

Kubuntu 22.04curl --version

curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2022-01-05

Kubuntu 20.04curl --version

curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08

比較のためにUbuntu Server 20.04を実行するcurl --version

curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08

これはKubuntu 20.04ですcurl --version

したがって、サーバーにもこれらのバージョンがインストールされていますが、しばらくは正常に動作します。

どちらもcurl --manual次のようなgrep結果を生成します。

~ curl --manual | grep -e "--connect-timeout"

    --connect-timeout <fractional seconds>
          curl --connect-timeout 20 https://example.com
          curl --connect-timeout 3.14 https://example.com
        See also --connect-timeout. Added in 7.47.0.
        See also -m, --max-time and --connect-timeout. Added in 7.59.0.
        See also --connect-timeout.

(20.04では少し冗長です。)したがって、どちらも少数を処理できる必須バージョン内にあります。

原因は何ですか?


別の観察:md5sumKubuntu 20.04およびUbuntu 20.04システムでテストを実行しましたが、どちらも同じハッシュを返しました。

c337f891e41007612076a3bc43284aa7 /usr/bin/curl

したがって、実行可能ファイルは同じでなければなりません。

which curl/usr/bin/curl両方のコンピュータから返されます。

(バージョン22.04にも同様に適用されます4b7b5099e836abd910f580808adc0874 /usr/bin/curl

環境が原因ですか?どのように?

すべてのケースで私はbashと確認しましたzsh

ベストアンサー1

プログラムはcurlロケールを認識しているようです。つまり、文字列から数値への変換は、次のLC_NUMERIC値によって異なります。

decimal_point
thousands_sep
grouping
numeric-decimal-point-wc
numeric-thousands-sep-wc
numeric-codeset

特に、de_DE.UTF-8ロケールでは、小数点文字は,.単位の区切り文字です。

$ LC_ALL=de_DE.UTF-8 locale -k LC_NUMERIC
decimal_point=","
thousands_sep="."
grouping=3;3
numeric-decimal-point-wc=44
numeric-thousands-sep-wc=46
numeric-codeset="UTF-8"

したがって、このロケールでは3.14実際には「適切な数値引数」ではありません。作成する必要があります3,14。だから

$ LC_NUMERIC="de_DE.UTF-8" curl --connect-timeout 3.14 https://example.com >/dev/null
curl: option --connect-timeout: expected a proper numerical parameter
curl: try 'curl --help' or 'curl --manual' for more information

しかし、

$ LC_NUMERIC="de_DE.UTF-8" curl --connect-timeout 3,14 https://example.com >/dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1256  100  1256    0     0   4880      0 --:--:-- --:--:-- --:--:--  4887

おすすめ記事