2

我阅读了以下片段:

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

好的。所以这会运行mysql客户端并执行CREATE DATABASE.
我的问题是为什么2>/dev/null不被认为是的一部分EOF
我假设它是在与用户和密码参数连接后<<输入到程序的。 那么怎么不属于呢?mysql
2>/dev/null<<

4

2 回答 2

3

因为 shell 中的单词是用空格分隔的。here-doc 终止符是一个单词,因此它不会占用该行的其余部分。

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

于 2013-07-16T20:39:43.023 回答
2

您的示例使用Heredoc,shell 最终将其解释为本身的重定向。它被视为其他形式的重定向。

等效示例:

此处字符串:

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

于 2013-07-16T20:52:44.517 回答