문제

SCP를 사용하는 설치 스크립트에서 출력을 캡처하고 로그인하려고합니다. 그러나 SCP가 인쇄하는 모든 것을 얻지 못하고 있습니다.

화면 출력 :

복사/user2/cdb/builds/tmp/uat/myfiles/* to server/user/myfiles as cdb

CDB@Server의 비밀번호 : MyFile 100% | ************************* | 2503 00:00

로그 출력 :

복사/user2/cdb/builds/tmp/uat/myfiles/* to server/user/myfiles as cdb

내 파일이 거기에 도착한 것을 정말로 알고 싶습니다. 내가 지금 아무 소용이 없도록 노력하고있는 것은 다음과 같습니다.

myscript.sh 2> & 1 | 티 mylogfile.log

누구든지 SCP 출력을 캡처하고 로그인하는 좋은 방법이 있습니까?

감사.

도움이 되었습니까?

해결책

SCP가 로그에서 성공했는지 여부는 누락 된 것 같습니다.

스크롤 막대가 stdout에 인쇄되지 않고 ncurses 또는 다른 종류의 tui를 사용하는 것 같아요?

SCP의 반환 값을보고 성공했는지 확인할 수 있습니다. 처럼

scp myfile user@host.com:. && echo success!

man scp 말한다

scp exits with 0 on success or >0 if an error occurred.

다른 팁

SCP는 제어 코드를 사용하여 진행률 표시 줄을 터미널로 인쇄합니다. 출력을 리디렉션하여 진행률 표시 줄을 생략하는 경우 감지됩니다.

SCP가 기본적으로 대부분의 배포판에 설치된 "스크립트"명령을 사용하여 터미널에서 실행되도록 SCP를 속임으로써이를 해결할 수 있습니다.

script -q -c "scp server:/file /tmp/" > /tmp/test.txt

test.txt의 내용은 다음과 같습니다.

file    0%    0     0.0KB/s   --:-- ETA
file   18%   11MB  11.2MB/s   00:04 ETA
file   36%   22MB  11.2MB/s   00:03 ETA
file   54%   34MB  11.2MB/s   00:02 ETA
file   73%   45MB  11.2MB/s   00:01 ETA
file   91%   56MB  11.2MB/s   00:00 ETA
file  100%   61MB  10.2MB/s   00:06

... 아마 당신이 원하는 것일 것입니다.

대화식 스크립트의 출력을 로그 파일로 리디렉션 하면서이 문제를 우연히 발견했습니다. 출구 코드를 항상 평가할 수 있으므로 로그에 결과가없는 것은 문제가되지 않았습니다. 그러나 나는 대화식 사용자가 진행률 표시 줄을보기를 정말로 원했습니다. 이 답변은 두 문제를 모두 해결합니다.

아마 당신은 사용할 수 있습니다 '스크립트'터미널 세션을 기록합니다.

scp myfile user@host.com:. && echo success! 

매우 도움이되지만 로그 파일에 메시지를 작성하기 위해 이렇게 변경했습니다.

scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1

그리고 이것은 "MyFile이 성공적으로 복사되었습니다!"라고 쓸 것입니다. 로그 파일로의 메시지.

노력하다:

scp server:/file /tmp/ > /dev/tty

아직 댓글을 달 수 없습니다 :( 그래서 여기에 업데이트를 추가하겠습니다 ...

@martin은 SCP 명령이 스크립트 중간에있는 경우 출력입니다. 5월 나중에 실제로 실행 된 명령 후에 나타납니다.

스크립트가 하위 쉘에서 명령을 실행해야하지만 아직 테스트하지 않았기 때문입니다.

편집 : 실제로 쉘을 생성하므로 (빌드 스크립트와 같이) 순차적 방식으로 실행할 것 (실제로 실패)이 필요하다면 스크립트 명령 사용에 대한 논리를 추가해야합니다.

스크립트 -q -c "당신의 명령"&& sleep 1

또는 부모의 껍질이 자녀 껍질이 끝나기 전에 마무리되기를 기다리도록 비슷한 것.

예, 최근에 Proc_open ()에서 PHP 스크립트 내에서 출력을 얻으려고 노력하고 있었는데, 출력을 얻으려고 노력하는 시간을 잃어 버렸습니다. 이 마무리 출력 내 스크립트

종료 코드만이 작업을 수행합니다 :-)

$ exit_code = proc_close ($ process);

$ grep -r "Error" xyz.out > abc.txt

위의 명령에서는 출력을 파일 ABC.txt에 저장하고 있습니다.

이것 grep 명령은 텍스트 오염을 검색하는 것입니다 오류 파일로 xyz.out 및 출력을 저장합니다 abc.txt 콘솔에 표시하지 않고.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top