
다음 명령을 실행하려고 합니다.
$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql
이는 엄청난 양의 오류 출력을 생성하며 그 중 쉘 내에서만 끝을 볼 수 있습니다. 무엇이 잘못되었는지 해결하려면 시작 부분을 보아야 합니다.
...
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6065: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6075: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6081: ERROR: current transaction is aborted, commands ignored until end of transaction block
그러나 메시지를 텍스트 파일로 보내려고 하면 다음과 같습니다.
$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql > error.txt
텍스트 파일에는 다음 세 가지 명령만 포함됩니다.
SET
BEGIN
ROLLBACK
그렇다면 모든 출력이 텍스트 파일로 전송되지 않는 이유는 무엇이며 모든 출력을 어떻게 볼 수 있습니까?
답변1
Unix(및 기타)에는 일반적으로 STDOUT과 STDERR이라는 두 가지 출력 스트림을 사용합니다. 둘 다표준 스트림.
>
STDOUT만 파일로 리디렉션하면 됩니다 .
2>
STDERR을 파일(파일 설명자가 "2"이므로 "2")로 리디렉션합니다 .
실제로 STDIN도 있는데 <
. 이것그래픽일반적으로 상호 작용하는 방식을 보여줍니다.
오류 메시지는 항상 STDERR로 인쇄되어야 하므로(그리고 대부분의 프로그램은 이를 존중합니다) 일반 출력과 오류 출력을 분리하려면 다음과 같이 시도해 보십시오.
command > normal.log 2> err.log
마찬가지로 STDERR을 STDOUT으로 리디렉션할 수 있습니다.
command 2>&1 > out.log
간단히 말해서 모든 것을 하나의 파일로 즉시 리디렉션할 수도 있습니다.최대껍질. 하지만 이식성을 위해 이것에 의존하지 마십시오.
command &> out.log