2016-11-08 2 views
1

컬링으로 wget 출력을 파이핑 중입니다. 모든 변수가 정확하게 올바른 값 종료 코드로 대체되는 경우 단말에서 실행 "모든 변수가 정확하게 대체되어 상태 코드 127을 더한 에러 메시지이고 0wget을 컬링으로 배관하십시오.

wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip" 
echo $? # 0 

이 하부 쉘에 스크립트의 내부에서 실행되고 해당 파일이나 디렉토리가 없습니다. "

$(wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip") 
echo $? # 127 

단서가 있습니까?

답변

1

$(command)command substitution의 구문입니다. 명령을 실행 한 다음 출력을 다시 명령 행으로 대체하는 것을 의미합니다. 일반적으로 인수에 사용됩니다. 그것은, 그것은 쉘 명령으로 curl 명령의 출력을 실행하려고하기 전에 당신이 명령을하지 않기 때문에 귀하의 경우에는

printf "%3.2f" $(some command) 

. 따라서 다운로드중인 웹 페이지가 유효한 쉘 명령이 아니면 출력을 실행하려고 할 때 오류가 발생합니다. 당신은 단지 서브 쉘에서 명령을 실행하지만, 명령 치환을하지하려면

, 그냥 $없이 괄호를 사용 :

(wget -O - $DOWNLOAD_URL | curl -H "Authorization:token $TOKEN" -H "Accept:application/vnd.github.v3+json" -H "Content-Type:application/zip" --data-binary @- "https://uploads.github.com/repos/myorg/myrepo/releases/$RELEASE_ID/assets?name=$NAME.zip") 
+0

감사 @Barmar - 그것은 내가 서브 쉘을 필요로하지 않았다는 것을 밝혀졌다 끝 ;-)하지만 지금은 차이점을 알고 있습니다. – szydan