다음 curl
명령은 예상대로 작동합니다.
$ curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"
* Rebuilt URL to: http://www.example.com/
...
> Accept: */*
> Foo:Bar
>
< HTTP/1.1 200 OK
...
내 사용자 정의 헤더( )를 볼 수 있지만 다음을 Foo:Bar
통해 실행할 때는 작동하지 않습니다 ssh
.
$ ssh user@localhost curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"
* Rebuilt URL to: http://www.example.com/
...
> Accept: */*
>
< HTTP/1.1 200 OK
...
다음을 사용하여 stdin이 원격에서 작동하는지 확인할 수 있습니다.
$ ssh user@localhost cat <<<"Foo:Bar"
Foo:Bar
내 목표는 stdin 또는 로컬 파일(변수가 아닌)의 헤더를 원격 curl
.
왜 위의 내용이 작동하지 않는지 잘 모르겠습니다.
답변1
@filename
버전 7.55.0에서는 for 스타일의 매개변수( )가 추가되었습니다 .-H
man curl
-H
/--header <header/@file>
7.55.0부터 이 옵션은 스타일 인수를 사용
@filename
하고 입력 파일의 각 줄에 헤더를 추가할 수 있습니다. 를 사용하면@-
컬이 stdin에서 헤더 파일을 읽게 됩니다.
ssh
이전 버전을 사용하기 때문에 문제가 발생합니다 .curl
curl
따라서 기본적으로 두 가지 다른 버전이 관련됩니다.
$ which curl && curl --version
/usr/local/bin/curl
curl 7.59.0 (x86_64-apple-darwin17.3.0) libcurl/7.59.0 OpenSSL/1.0.2o zlib/1.2.11 libidn2/2.0.4
$ ssh user@localhost 'which curl && curl --version'
/usr/bin/curl
curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
따라서 최신 버전 /usr/local/bin/curl
(v7.59/OpenSSL)으로의 경로를 하드코딩하면 정상적으로 작동하는 것 같습니다.
$ ssh user@localhost /usr/local/bin/curl -H @- -vso/dev/null http://www.example.com <<<"Foo:Bar"