当命令使用EOF变量时,删除BASH中命令的输出

时间:2018-01-16 13:01:27

标签: linux bash shell

作为我的bash shell脚本的一部分,我运行以下代码:

sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL

这很好用,但我在终端窗口输出,我想避免。通常我只是在命令的末尾添加一个>/dev/null语句,我想要抑制输出,但是如果不搞砸EOSQL文本块,我就不能这样做。

我尝试过以下内容:

`sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL` >/dev/null

但是我在终端窗口收到一条消息TERMINAL: command not found

有趣的是,尽管有这条消息,sql命令仍会运行。

非常感谢任何帮助。

谢谢,

保罗。

2 个答案:

答案 0 :(得分:7)

只需在here-document重定向后立即添加输出重定向;此文档本身直到下一行才开始。

sql -umyuser mydb <<-EOSQL > /dev/null
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL

作为助记符,您可能(错误)将<<-EOSQL解析为< <-EOSQL,在这种情况下,以<<-开头的文件名表示“脚本内”用于重定向的文件而不是常规的命名磁盘文件。但请理解,<<<<-实际上是<的独立运算符。无论哪种方式,here-doc运算符都可以根据需要与其他重定向运算符混合使用,如注释所指出的那样。

答案 1 :(得分:3)

正如本comment所述,您可以使用花括号来避免previous答案中出现的浪费。

{sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL
} &>/dev/null
# Well, this is a bit neat too, isn't it? 

现在看起来很好: - )礼貌@ghoti