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
'programing' 카테고리의 다른 글
Azure 리소스 그룹 템플릿에서 Application Insights 인스턴스에 대한 계측 키를 검색하는 방법은 무엇입니까? (0) | 2023.05.11 |
---|---|
클래스 __dict_가 매핑 프록시인 이유는 무엇입니까? (0) | 2023.05.11 |
다른 목록에서 한 목록을 빼려면 어떻게 해야 합니까? (1) | 2023.05.11 |
Visual Studio 2010 - XAML 편집기의 속도가 매우 느립니다. (0) | 2023.05.11 |
Lodash를 사용하여 목록에서 요소를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.11 |