將所有錯誤訊息發送到文字檔案?

將所有錯誤訊息發送到文字檔案?

我正在嘗試運行以下命令:

$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql 

它會產生大量錯誤輸出,我只能在 shell 中看到其中的結尾 - 我需要看到開頭才能找出問題所在。

... 
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

相關內容