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
的方式运行它。