SSH를 통해 원격으로 시작할 때 tee가 작동을 거부하는 이유는 무엇입니까?

SSH를 통해 원격으로 시작할 때 tee가 작동을 거부하는 이유는 무엇입니까?

내 실수는 어디에 있습니까? 질문에 대한 답변으로스택 교환 질문, 디렉토리를 tar하고 아카이브를 원격 시스템으로 전송합니다. 원격 시스템에서 tee이를 파일에 저장하고 tar압축을 풀기 위해 파이프합니다.

내 원래 명령은... 생성은 되지만 생성되지는 않습니다.tar -cf - mydir | ssh [email protected] bash -c "tee archive.tar | tar -xf -"mydirarchive.tar

더 간단한 테스트를 위해 cat저는 리모컨 에 쓴 /tmp/outfile다음 . 그러나 파일은 건드리지 않은 것 같습니다./tmp/outfileteetee

$ ssh [email protected] rm -r /tmp/outfile
$ echo data | ssh [email protected] bash -cx "cat > /tmp/outfile"
+ cat
$ echo DATA | ssh [email protected] bash -cx "tee /tmp/outfile"
DATA
+ tee
$ ssh [email protected] cat /tmp/outfile
data

/tmp/outfile존재하지 않는 경우 tee생성하지 마십시오.teeDATA로 덮어쓰면 어떨까요 ?/tmp/outfile원격 서버에 로그인하여 실행하면 예상대로 작동합니다.

원격 서버는 Centos 8을 실행 중입니다. 나는 항상 오류가 명백한 것처럼 느껴지지만 그것을 볼 수 없습니다.

답변1

이것은 고전적인 인용 문제이지만 이 경우에는 확실히 해결하려고 노력했습니다. 귀하의 tar구조를 고려하십시오.

ssh [email protected] bash -c "tee archive.tar | tar -xf -"

로컬 셸은 이를 일반적인 처리, 따옴표 제거, 대체 변수 등의 일부로 평가합니다. 최종 결과는 ssh실행을 위해 큰따옴표 없이 명령줄이 수신되고, 이것이 실행을 위해 원격 셸로 전달되는 것입니다.

bash -c tee archive.tar | tar -xf -

인스턴스 는 인수로 bash할당되며 , as로 전달된 값은 그대로 유지됩니다(나중에 무시됨) . 이 인스턴스에서 실행되는 명령에는 나열된 출력 파일이 없으므로 해당 내용을 다음으로 파이프합니다.tee-carchive.tar$0teebash표준 출력캡처 및 처리되는 위치입니다 tar.

올바른 방법은 에 전달된 명령 문자열을 인용하여 ssh다음과 같은 명령을 제공하는 것 입니다.

ssh [email protected] 'tee archive.tar | tar -xf -'

관련 정보