내 로컬 컴퓨터에서 명령을 실행하고 SSH를 통해 stderr을 원격 컴퓨터로 보내려고 합니다. 난 할 수 없어
ssh remote machine "command 2>stderr.log"
원격 컴퓨터가 명령을 실행할 수 있도록 올바르게 구축되지 않았기 때문에 로컬 컴퓨터에서 명령을 실행해야 합니다. 아직 시도하지는 않았지만 기본적으로 우리는 할 수 없다고 확신합니까 2>ssh local machine /dir/stderr.log
?
답변1
내가 이해하는 바에 따르면 명령을 실행하고 싶습니다.현지의그러나 stderr 출력은 원격 로그 파일에 저장됩니다.
노력하다프로세스 교체:
local_command 2> >(ssh somemachine 'cat >logfile')
이것은>(...)
프로세스 교체. 괄호 안의 명령을 기반으로 파일과 유사한 객체를 생성합니다. 따라서 2>
stderr은 파일류 객체로 리디렉션되어 출력을 원격 시스템에 저장합니다.
아니면 그냥 기존 리디렉션을 사용하세요.
{ local_command 2>&1 1>&3 | ssh somemachine 'cat >logfile'; } 3>&1
여기서 stderr는 stdout으로 리디렉션되어 ssh로 파이프될 수 있습니다. stdout이 ssh로 이동하지 않도록 파일 핸들 3으로 리디렉션합니다. 명령이 끝나면 파일 핸들 3이 stdout으로 리디렉션되어 터미널에 나타납니다.
답변2
프로세스가 실행되는 동안 프로세스의 stderr 추적에 관심이 없다면 임시 로컬 파일을 사용할 수 있습니다.
#!/bin/bash
tmpfile=`mktemp`
trap '/bin/rm -f $tmpfile ; exit' 0 1 2 3 15
run_command 2> $tmpfile
if [ -s $tmpfile ]
then
scp $tmpfile remoteserver:logfile
fi
exit 0
"라이브" 데이터를 원할 경우 버퍼링 문제가 있습니다. SSH를 통해 stderr을 보내는 것은 라인 버퍼링되지 않을 수 있으므로 전체 개념이 최선의 접근 방식이 아닐 수 있습니다.