source

스크립트에서 stderr과 stdout을 동일한 줄에 있는 다른 파일로 리디렉션하는 방법은 무엇입니까?

manysource 2023. 5. 25. 22:10

스크립트에서 stderr과 stdout을 동일한 줄에 있는 다른 파일로 리디렉션하는 방법은 무엇입니까?

이 정도는 알고 있습니다.

$ command 2>> error

$ command 1>> output

stderr을 error 파일로 출력하고 stdout을 출력 파일로 출력할 수 있는 방법이 있습니까?

한 줄로 추가하기만 하면 됩니다.command 2>> error 1>> output

그러나 참고:>>파일에 이미 데이터가 있는 경우 추가할 수 있습니다.반면에.>파일의 기존 데이터를 덮어씁니다.

그렇게,command 2> error 1> output추가하기를 원하지 않는 경우.

단지 완성을 위해, 당신은 글을 쓸 수 있습니다.1>정당하게>기본 파일 설명자가 출력이기 때문입니다.그렇게1>그리고.>같은 것입니다.

그렇게,command 2> error 1> output된다,command 2> error > output

사용해 보십시오.

your_command 2>stderr.log 1>stdout.log

더 많은 정보

숫자들0통해.9bash의 파일 설명자입니다. 0표준 입력을 나타냅니다.1표준 출력을 나타냅니다.2표준 오류를 나타냅니다. 3통해.9다른 임시 용도로 사용할 수 있습니다.

운영자를 사용하여 모든 파일 설명자를 파일 또는 다른 파일 설명자로 리디렉션할 수 있습니다.>대신 연산자를 사용할 수 있습니다.>>파일을 만드는 대신 파일에 추가합니다.

용도:

file_descriptor > filename

file_descriptor > &file_descriptor

고급 Bash-Scripting Guide: Chapter 20. I/O Redirection을 참조하십시오.

그런 식으로:

$ command >>output 2>>error

또는 출력(stdout & stderr)을 단일 파일에 혼합하려는 경우 다음을 사용할 수 있습니다.

command > merged-output.txt 2>&1

여러 명령의 출력을 리디렉션할 수 있습니다.이것은 명령줄 또는 bash 스크립트에서 가장 유용하게 사용됩니다.-s암호 프롬프트를 화면으로 유도합니다.

여기서 차단 cmds stdout/stderr은 별도의 파일로 전송되며 표시할 내용은 없습니다.

sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF

여기서 블록 cmds stdout/stderr은 단일 파일 및 디스플레이로 전송됩니다.

sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF

여기서 차단 cmds stdout/stderr은 별도의 파일로 전송되고 stdout은 표시됩니다.

sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF

사용자 및 사용자 이름에 따라 암호가 필요하거나 필요하지 않을 수 있습니다.

언급URL : https://stackoverflow.com/questions/7901517/how-to-redirect-stderr-and-stdout-to-different-files-in-the-same-line-in-script