如何使用/ dev / null for bash命令

时间:2017-11-08 10:33:29

标签: linux bash su

我使用下面的命令来获取我的SQL查询的结果。

su - postgres -c 'psql -d dbname' with stdin "COPY ( my SQL query ) TO STDOUT WITH CSV HEADER"

这在我的服务器上运行正常,但在不同的机器上,它正在打印带有SQL查询输出的bash警告。

例如 -

/etc/profile: line 46: HISTSIZE: readonly variable
/etc/profile: line 50: HISTCONTROL: readonly variable
/etc/profile.d/20-tmout.sh: line 1: TMOUT: readonly variable
/etc/profile.d/history.sh: line 6: hcmnt_tty: readonly variable
name
abc

无论如何,请告诉我,以便我可以跳过上述警告信息并仅获取数据。

如果我想在这种情况下使用/ dev / null如何修改上述命令以仅获取数据。

3 个答案:

答案 0 :(得分:0)

如果您的意思是“如何仅丢弃错误输出?”,那么可以采用的方法是将标准错误流重定向到遗忘(/dev/null),如下所示:< / p>

your-command 2>/dev/null

这样,如果命令将数据输出到标准输出,它就会通过,但是对标准错误套接字的任何输出都将被丢弃,因此您将看不到这些错误消息。

顺便说一下,2这里是标准错误的简写文件描述符。

答案 1 :(得分:0)

很抱歉这是未经测试的,但我遇到了同样的错误,您的数据库会话不是可读/写的。您可以将语句回显给psql以强制执行适当的会话,如下所示。我不确定stdin可能会如何影响

echo 'SET TRANSACTION READ WRITE; SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE ; COPY ( my SQL query ) TO STDOUT WITH CSV HEADER' | su - postgres -c 'psql -d dbname' with stdin 

答案 2 :(得分:0)

谨慎 - bash hack

su - postgres -c 'psql -d dbname' with stdin "COPY ( my SQL query ) TO STDOUT WITH CSV HEADER" | grep -v "readonly"