如何在bash中解决另一个命令的输入?我们如何重定向错误并传递输入?

时间:2013-07-16 20:30:05

标签: mysql linux bash shell

我阅读了以下代码段:

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

确定。因此,这会运行mysql客户端并执行CREATE DATABASE 我的问题是2>/dev/null如何被视为EOF的一部分? 我假设<<是用于连接用户和密码参数后程序mysql的输入。 那么2>/dev/null如何不属于<<

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

您的示例使用 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