컬을 사용할 때 시스템 나노초 시퀀스를 생성할 수 있기를 원합니다.
내 코드는 다음과 같습니다
컬 -X POST -H '콘텐츠 유형: 텍스트/xml' -d @req.xml 서버_URL > 결과.xml
req.xml에는 다음 내용이 포함되어 있습니다.
<MessageSeq>${=(System.nanoTime())}</MessageSeq>
따라서 요청의 예상 값은 다음과 같아야 합니다.
2163586109424686
하지만 그것은 나에게 다음을 제공합니다:
${=(System.nanoTime())}
나노초 단위로 시스템 타이머로 변환하는 방법입니다.
답변1
불행하게도 cURL에는 값 보간을 위한 기본 메커니즘이 없습니다. 그러나 대신 몇 가지 마법을 사용할 수 있습니다 sed
.
sed "s/\${TIME}/$(date +%s%N)/g" req.xml | curl -X POST -H 'Content-Type: text/xml' -d @- server.tld > result.xml
이 date
명령은 현재 시간을 지정된 형식으로 출력합니다. %s
는 UNIX 시대 이후의 초 수 %N
이고 현재 초의 나노초 수입니다.
Bash에서는 -quoted 문자열을 $(...)
사용하여 "
한 명령의 출력을 다른 명령의 인수에 삽입합니다. 그러면 모든 인스턴스를 ${TIME}
현재 시간으로 바꾸는 sed 명령이 생성됩니다 . 컬 매개변수는 -d @-
stdin에서 POST 데이터를 읽도록 합니다. 각 표현식의 구문을 유지할 수는 있지만 그만한 가치는 없다고 생각합니다.