programing

Linux에서 Bash를 사용하여 모든 출력을 파일로 리디렉션하시겠습니까?

lastmemo 2023. 5. 11. 23:36
반응형

Linux에서 Bash를 사용하여 모든 출력을 파일로 리디렉션하시겠습니까?

명령줄 프로그램의 모든 출력을 파일로 리디렉션하려고 합니다.저는 Bash를 사용하고 있습니다.출력 중 일부는 파일로 보내지지만 일부는 터미널에 계속 표시되고 파일에 저장되지 않습니다.

유사한 증상이 여기에 설명되어 있습니다.

모든 출력을 파일로 리디렉션

하지만 제안된 솔루션(capture stderr)을 시도했지만 성공하지 못했습니다.

<cmd> <args> > stdout.txt 2> stderr.txt

파일 stderr.txt가 생성되었지만 비어 있습니다.

가능한 단서는 명령줄 프로그램이 동일한 컴퓨터의 서버와 통신하는 클라이언트라는 것입니다.출력 중 일부가 서버에서 나오는 것일 수 있습니다.

출처에 관계없이 단말기의 모든 출력을 캡처할 수 있는 방법이 있습니까?

편집:

누락된 출력물이 서버에서 생성되는 것을 확인했습니다.별도의 터미널에서 명령을 실행하면 두 터미널 모두에서 일부 출력이 발생하므로 명령 터미널에서 파일로 모든 출력을 파이프로 연결할 수 있습니다.이것은 서버 출력을 캡처하는 방법에 대한 문제를 제기하지만, 그것은 다른 질문입니다.

이 구문을 사용하여 모든 출력 stderr 및 stdout을 stdout으로 리디렉션할 수 있습니다.txt

<cmd> <args> > allout.txt 2>&1 

POSIX는 아니지만 bash 4는&>연산자:

command &> alloutput.txt

서버가 동일한 터미널에서 시작된 경우, 터미널에 기록되고 있는 것으로 추정되는 서버의 stderr이며 캡처하지는 않습니다.

모든 것을 캡처하는 가장 좋은 방법은 다음을 실행하는 것입니다.

script output.txt

서버 또는 클라이언트를 시작하기 전에 설정합니다.그러면 모든 터미널 출력이 출력으로 리디렉션된 새 셸이 실행됩니다.터미널뿐만 아니라 txt.그런 다음 새 셸 내에서 서버를 시작한 다음 클라이언트를 시작합니다.화면에 표시되는 모든 내용(셸 내에서 단말기에 쓰는 모든 내용의 입력 및 출력)이 파일에 기록됩니다.

완료되면 "exit"를 입력하여 다음 명령에 의해 실행되는 셸을 종료합니다.script지휘권

충돌 프로그램 *cough PHP cough* 충돌 시 셸이 충돌 이유 보고서에서 실행되었습니다.Segmentation fault (core dumped)

이 출력이 기록되지 않도록 하기 위해 다음과 같은 출력을 캡처하고 지시하는 하위 셸에서 명령을 실행할 수 있습니다.

sh -c 'your_command' > your_stdout.log 2> your_stderr.err
# or
sh -c 'your_command' > your_stdout.log 2>&1

프로세스를 백그라운드로 유지하면서 하위 셸을 실행하고 모든 출력을 리디렉션할 수 있습니다.

( ./script.sh blah > ~/log/blah.log 2>&1 ) &
echo $! > ~/pids/blah.pid

올바른 대답은 다음과 같습니다: http://scratching.psybermonkey.net/2011/02/ssh-how-to-pipe-output-from-local-to.html

your_command | ssh username@server "cat > filename.txt"

언급URL : https://stackoverflow.com/questions/16842014/redirect-all-output-to-file-using-bash-on-linux

반응형