如何从单独的输入行(来自文件或stdin)格式化bash命令行

时间:2016-08-23 13:42:19

标签: bash

我试图整理一个脚本来批量更新一堆数据库表。我在文件中有一个列表(但我也可以从stdin中获取它),并且我试图构建ALTER TABLE命令。我有以下

while read table; do echo "ALTER TABLE $table ENGINE=Aria"; done < tables

然而输出类似这样的东西

 ENGINE=Ariamydatabase.mytableone
 ENGINE=Ariamydatabase.mytabletwo
 ENGINE=Ariamydatabase.mytablethree

而不是

ALTER TABLE mydatabase.mytableone ENGINE=Aria;
...
像我预期的那样。我究竟做错了什么?最后,我将echo更改为mysql -uroot -ppassword -e"ALTER TABLE $table ENGINE=Aria;"

2 个答案:

答案 0 :(得分:0)

文件tables具有DOS \r\n行结尾。这会导致$table\r回车结束,打印时将光标移回行的开头。

您想要convert tables to UNIX \n line endings

答案 1 :(得分:-2)

Cat命令将处理您的新线路操作员。

试试这段代码:

$ cat tables | while read table; do echo "ALTER TABLE $table ENGINE=Aria"; done