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

pau*_*ith 1 linux bash shell

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

sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL
Run Code Online (Sandbox Code Playgroud)

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

我尝试过以下内容:

`sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL` >/dev/null
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将非常感激.

谢谢,

保罗.

che*_*ner 7

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

sql -umyuser mydb <<-EOSQL > /dev/null
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL
Run Code Online (Sandbox Code Playgroud)

作为助记符,您可能(误)解析<<-EOSQL< <-EOSQL,在这种情况下,文件名以" <<-脚本"文件开头或表示重定向而不是常规命名磁盘文件.明白了,虽然,<<<<-真的是从不同的运营商<.无论哪种方式,here-doc运算符都可以根据需要与其他重定向运算符混合,就像注释所指出的那样.

  • 可能还值得一提的是,提供重定向的顺序无关紧要.`sql -umyuser mydb>/dev/null << - EOSQL`应该也能正常工作,并且可以减少混淆. (2认同)