如何在bash中parsing另一个命令的input? 我们如何redirect错误并通过input?

我阅读以下代码片段:

mysql -u $USER -p $PASS <<EOF 2> /dev/null CREATE DATABASE students; EOF 

好。 所以这个运行mysql客户端并执行一个CREATE DATABASE
我的问题是如何2>/dev/null不被视为EOF一部分?
我假设<<是用于input程序的mysql之后,它与用户和密码参数连接起来。
那么2>/dev/null如何不是<<一部分呢?

因为shell中的单词被空格分隔。 here-doc终结符是一个单词,所以它不消耗行的其余部分。

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Operation

你的例子使用了Heredoc ,而shell最终将其解释为重定向。 它被视为像其他形式的重定向。

等效例子:

Herestring:

 mysql -u $USER -p $PASS<<<"CREATE DATABASE students;" 2>/dev/null 

回声:

 echo "CREATE DATABASE students;" | mysql -u $USER -p $PASS 2>/dev/null 

我无耻地建议Greg的Wiki进一步阅读,因为这是一个很好的资源:

http://mywiki.wooledge.org/BashGuide/InputAndOutput