Programing

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

lottogame 2020. 11. 3. 07:35
반응형

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


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

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

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

그러나 나는 성공하지 않고 제안 된 솔루션 (stderr 캡처)을 시도했습니다.

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

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

가능한 단서는 명령 줄 프로그램이 동일한 시스템의 서버와 통신하는 클라이언트라는 것입니다. 일부 출력이 서버 에서 나왔을 수 있습니다 .

출처에 관계없이 터미널에서 모든 출력을 캡처하는 방법이 있습니까?

편집하다:

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


서버가 동일한 터미널에서 시작되면 아마도 터미널에 기록되고 캡처하지 않는 서버의 stderr입니다.

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

script output.txt

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

완료되면 "exit"를 입력하여 script명령에 의해 실행 된 쉘을 종료하십시오 .


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

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

POSIX는 아니지만 bash 4에는 &>연산자가 있습니다.

command &> alloutput.txt


프로세스를 백그라운드에두고 서브 쉘을 실행하고 모든 출력을 리디렉션 할 수 있습니다.

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

나는 충돌 프로그램에 문제가 있었다 * 기침 PHP 기침 * 충돌시 쉘은 충돌 이유를보고에서 실행되었습니다,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

적절한 대답은 다음과 같습니다. 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

반응형