bash脚本捕获其他下标输出

bash脚本捕获其他下标输出,bash,shell,psql,Bash,Shell,Psql,我有一个创建数据库的简单脚本 #!/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 这: 生成空的结果文件 psql生成一些输出到终端的日志信息,问题是我不能重定向这些信息,因此

我有一个创建数据库的简单脚本

#!/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
这:

生成空的结果文件

psql生成一些输出到终端的日志信息,问题是我不能重定向这些信息,因此我想进一步传递它

有没有存储psql输出的方法?最好不要在终端上打印

psql生成一些日志信息输出到终端,问题是我无法重定向该信息,因此我想进一步传递它。

让您的脚本如下所示:

#!/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
psql生成一些日志信息输出到终端,问题是我无法重定向该信息,因此我想进一步传递它。

让您的脚本如下所示:

#!/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

不幸的是,这不会像现在这样工作,因为它会进入变量,我认为这不是我们想要的。所以这个答案可能需要和@RobinGreen结合起来:哦,是的,很好,我错过了。但是因为所有操作都是使用
$RESULT
来响应它。OP可以避免将输出存储在
$RESULT
中,并将所有输出/错误写入终端。我不能调用create.sql两次,把结果放在变量中,然后再打印,但结果总是空的,不需要调用两次。我刚刚从question中复制了脚本,该脚本调用了两次。不幸的是,这将不能按原样工作,因为它将进入变量,我认为这不是所需要的。所以这个答案可能需要和@RobinGreen结合起来:哦,是的,很好,我错过了。但是因为所有操作都是使用
$RESULT
来响应它。OP可以避免将输出存储在
$RESULT
中,并将所有输出/错误写入终端。我不能调用create.sql两次,把结果放在变量中,然后再打印,但结果总是空的,不需要调用两次。我刚刚从question复制了脚本,该脚本调用了两次。这与此无关,但如果希望使用bash执行脚本,则应将第一行中的
/bin/sh
更改为
/bin/bash
。然后,您可以
chmod+x
并以
/MakeDB.sh
的方式运行它。这与此无关,但是如果您希望使用bash执行脚本,您应该将第一行中的
/bin/sh
更改为
/bin/bash
。然后,您可以
chmod+x
它并以
/MakeDB.sh
的方式运行它。