Отправлять все сообщения об ошибках в текстовый файл?

Отправлять все сообщения об ошибках в текстовый файл?

Я пытаюсь выполнить следующую команду:

$ 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

Связанный контент