
我正在嘗試運行以下命令:
$ 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