컬: 옵션 --connect-timeout: 올바른 숫자 인수가 필요합니다.

컬: 옵션 --connect-timeout: 올바른 숫자 인수가 필요합니다.

고쳐 쓰다: 이는 버그로 7.87.0 버전에서 수정되었습니다.https://github.com/curl/curl/commit/975efec61b83b840cf18ab2ee23b9202c60ca8a7

허용된 답변은 이전 버전에서도 여전히 작동하지만 자동 업그레이드 후에도 스크립트가 계속 작동하도록 업그레이드하는 것이 좋습니다.


curl내 상자 두 개에 문제가 있습니다. 약 24개의 Linux 설치에서 curl --connect-timeout.

예제 명령은 curl --connect-timeout 3.14 https://example.com내 컴퓨터 두 대(내 유일한 데스크톱)에서만 실패합니다.나의 유일한 쿠분투 설치. 나머지는 주로 Ubuntu Server와 일부 Debian 설치이며 모두 헤드리스입니다.

이 두 가지 Kubuntu 데스크톱 버전은 서로 다릅니다. 하나는 업그레이드된 버전 22.04 LTS이고 다른 하나는 20.04 LTS 버전입니다.

쿠분투 22.04 curl --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

쿠분투 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

비교를 위해 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

관련 정보