我阅读以下代码片段:
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进一步阅读,因为这是一个很好的资源: