req.xml 파일에서 ${=(System.nanoTime())}과 함께 컬을 사용하세요.

req.xml 파일에서 ${=(System.nanoTime())}과 함께 컬을 사용하세요.

컬을 사용할 때 시스템 나노초 시퀀스를 생성할 수 있기를 원합니다.

내 코드는 다음과 같습니다

컬 -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 데이터를 읽도록 합니다. 각 표현식의 구문을 유지할 수는 있지만 그만한 가치는 없다고 생각합니다.

관련 정보