2013-11-30 2 views
-1

У меня есть простой скрипт, создающий базу данныхБаш поймать сценарий другой индекс выходной

#!/bin/sh 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
psql -d track -q -f "$DIR"/create.sql > RESULT 
RESULT="$(psql -d track -q -f "$DIR"/create.sql)" 
echo $RESULT 

это:

$ bash MakeDB.sh > result 

производит пустой файл результатов

PSQL производит некоторые данные журнала, который выводится на терминал , дело в том, что я не могу перенаправить эту информацию, я хочу в дальнейшем передать ее дальше.

Есть ли способ хранения вывода psql? Было бы лучше, если бы он не был напечатан в терминале.

+0

Это ISN» t, но вы должны изменить '/ bin/sh' на'/bin/bash' в первой строке, если вы хотите, чтобы скрипт выполнялся с использованием bash. Затем вы можете «chmod + x» и запустить его так же, как './MakeDB.sh'. –

ответ

4

psql produces some log info that is output to terminal, the thing is I can't redirect that info, I want to pass it further as a result.

Есть сценарий, как это:

#!/bin/sh 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
psql -d track -q -f "$DIR"/create.sql > RESULT 2>&1 
psql -d track -q -f "$DIR"/create.sql 

Вы можете перенаправить stderr в тот же файл, как stdout, используя следующий синтаксис:

bash MakeDB.sh > result 2>&1 
+0

К сожалению, это не сработает, так как оно перейдет в переменную, что я не думаю, что это нужно. Поэтому этот ответ, возможно, необходимо объединить с http://stackoverflow.com/questions/12451278/bash-capture-stdout-to-a-variable-but-still-display-it-in-the-console –

+1

@RobinGreen: О да, хорошо, я пропустил это. Но так как все ОП работает с '$ RESULT', чтобы повторить это. OP может избежать сохранения вывода в '$ RESULT', и пусть весь вывод/ошибка будет записана на терминал. Отредактировал его дальше. – anubhava

+0

Я не могу вызвать create.sql 2 раза, помещая результат в переменную, а затем печатать ее, но RESULT всегда пуст –

Смежные вопросы