我阅读了以下片段:
mysql -u $USER -p $PASS <<EOF 2> /dev/null
CREATE DATABASE students;
EOF
好的。所以这会运行mysql
客户端并执行CREATE DATABASE
.
我的问题是为什么2>/dev/null
不被认为是的一部分EOF
?
我假设它是在与用户和密码参数连接后<<
输入到程序的。
那么怎么不属于呢?mysql
2>/dev/null
<<
因为 shell 中的单词是用空格分隔的。here-doc 终止符是一个单词,因此它不会占用该行的其余部分。
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Operation
您的示例使用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 上进一步阅读,因为它是一个极好的资源: