2017-02-06 1 views
2

내가ssh를 파이프 라인 명령 오류

ssh [email protected] cat /root/devops/giveAllArtifacts.txt | xargs -I {} sh -c "grep {} /ci/test.log;" 

내가 그렙 점점하지 오전 컴퓨터에서 실행하고 있습니다 : /ci/test.log을 : 그런 파일이나 디렉토리

하지만 같은 명령 (cat /root/devops/giveAllArtifacts.txt | xargs -I {} sh -c "grep {} /ci/test.log;"을)를에 서버 : lPServerHgl은 오류없이 작동합니다.

피시의 ssh 연결에는 문제가 없습니다. 다른 모든 명령은 ssh를 통해 작동합니다. 파이핑 된 명령에는 약간의 문제가있는 것 같습니다.

답변

1

파이프가 원격 서버가 아닌 로컬 컴퓨터에서 실행 중입니다.

ssh [email protected] remote-cmd [...args] | local-cmd [...args] 
--------- runs in server --------- | --- runs locally ---- 

파이프는 당신의 쉘이 아닌 원격 하나에 의해 해석된다. ssh 연결의 다른 쪽에서 파이프 라인을 실행하려면 거기에 셸을 호출해야합니다. 예 :

ssh [email protected] bash -c "'cat file.txt | grep foo'" 

내부 인용 부호에 유의하십시오. 그러면 파이프 라인이 다른 컴퓨터의 bash 프로세스로 전송됩니다.

이러한 명령을 입력하는 것은 번거롭고 버그가 발생할 수 있습니다. 원격 시스템에 즉시 실행할 수있는 스크립트를 배치하여 단일 명령으로 호출 할 수 있습니다.

+0

당신이 말한 것이 맞는지 나는 테스트했습니다. ssh user @ host ls -l/ci | grep drwx 및 로컬 컴퓨터 대신 remotehost 결과를 제공합니다. bash를 두 번 호출하는 것은 xrags sh -c – christoph

+0

에서 이미 그렇게하고 있기 때문에 작동하지 않습니다.'ssh user @ host bash -c "cat file.txt | grep foo"'이것은 제대로 작동하지 않습니다. ssh는 결국'bash -c cat file.txt | grep foo'를 원격지에서 실행합니다. – Kenster

+0

다른 방법으로 원격에서 실행될 단일 명령을 ssh에 지정할 수 있습니다. 시도했습니다.이 시도했습니다. ssh 루트 @ lPServerHgl'cat /root/devops/giveAllArtifacts.txt | xargs -I {} sh -c "grep {} /ci/test.log;" 여전히 작동하지 않습니다. – christoph

관련 문제