소프트웨어 설치 시 stdout 및 stderr 리디렉션

소프트웨어 설치 시 stdout 및 stderr 리디렉션

나는 단순히 stdout과 stderr를 저장할 수 있기를 원합니다.소프트웨어 설치

저는 3가지 상황을 해결하고 싶습니다.

  1. apt-get을 사용할 때
  2. apt-get과 tee를 사용할 때
  3. make install을 사용할 때

1. apt-get을 사용할 때

소프트웨어 설치 과정에서 stdout과 stderr의 차이를 "시각화"하는 데 문제가 있습니다. 실제로 소프트웨어를 설치할 때 터미널에 많은 출력이 표시되는 경우가 많으며 그 중 일부에는 경고가 표시되는 경우가 많습니다. 그러니까 이런 맥락에서"

  • 설치가 성공하면 stderr이 완전히 비어 있습니까?
  • 또는 경고가 있는 경우 표준 출력에서 ​​"남은" 것은 무엇입니까?
  • 아니면 이 경우 stdout과 stderr을 함께 저장하는 것이 좋습니까?

어쨌든 이게 먹힐까?

sudo apt-get package 1>output.txt 2>errors.err

2. apt-get과 tee를 사용하는 경우

실제로 stdout과 sterr을 파일에 저장하는 것뿐만 아니라 내 터미널에서 계속 보는 것이 더 나을 것입니다. 그럼 티를 활용하면, 이게 최고의 작품이 될까요?

sudo apt-get package | tee 1>output.txt 2>errors.err

3. make install을 사용하는 경우

일이 복잡해지는 것 같은데.. 이렇게 간단할까요?

./configure 1>output1.txt 2>errors1.err
make 1>output2.txt 2>errors2.err
make install 1>output3.txt 2>errors3.err

답변1

나는 이러한 문제들을 차례로 논의할 것이다:

$ sudo apt-get install package 1> apt.out 2> apt.err

apt-get질문을 하기로 결정했다면 이로 인해 몇 가지 문제가 발생할 수 있습니다. 프롬프트는 표준 출력으로 전송되고 파일로 리디렉션되며 사용자에게 표시되지 않습니다. 이러한 방식으로 apt-get을 사용하려면 apt-get --assume-yes install package 1> apt.out 2> apt.err다른 옵션을 사용하는 방법에 대한 질문( )을 선제적으로 수행하시기 바랍니다. 그러나 "예"를 전제로 하면 의도하지 않은 결과가 발생할 수 있다는 점에 유의하세요.

$ sudo apt-get install package | tee 1> apt.out 2> apt.err

이것이 약간 더 낫지만 먼저 호출을 수정해 보겠습니다 tee.

$ sudo apt-get package 2> apt.err | tee apt.out

초기 호출이 올바르게 이루어지지 않아 오류 로그 tee대신 tee표준 오류가 리디렉션됩니다 .apt-get

apt-get이렇게 하면 더 잘 작동하지만 질문에 대한 답변을 제안할 수 있는 표준 오류로 전송되는 유용한 정보가 화면에 표시되지 않습니다 .

$ ./configure 1>output1.txt 2>errors1.err
$ make 1>output2.txt 2>errors2.err
$ make install 1>output3.txt 2>errors3.err

이렇게 하면 예상한 대로 정확하게 수행됩니다. 세 가지 명령에 대한 모든 표준 오류와 표준 출력이 포함된 6개의 파일이 생성됩니다. 다음과 같이 약간 덜 난해한 파일 이름을 사용하는 것이 좋습니다.

$ ./configure 1> configure.out 2> configure.err
$ make 1> make.out 2> make.err
$ make install 1> install.out 2> install.err

하지만 나는 그것들을 두 개의 파일에 넣는 것을 선호합니다.

$ ( ./configure && make && make install ) 1> build.out 2> build.err

이는 두 가지 다른 작업을 수행합니다. 첫째, 모든 빌드 명령을 하위 셸에 넣고 마술처럼 출력 스트림을 함께 수집합니다. 둘째, 쉘 &&연산자를 사용하여오직이전 명령이 성공한 경우 다음 명령을 실행합니다.

노트apt-get:귀하의 전화를 전체 과정으로 수정했습니다 .

관련 정보