在通过linux脚本生成文本文件时,我遇到了一个相当奇怪的问题。目前的情况是:
在我的语法磁盘站上,我正在执行sh-脚本。它使用只读的SQL-user访问本地mySQL数据库.有多个调用(每调用一行),每个调用都将接收到的输出写入不同位置的.csv文件。
.sh脚本如下所示:
/some/path/create_lists.sh
mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv使用我的Windows,我想访问这些文件。
原则上,这已经很好了,但是只有最后创建的.csv文件才能被MS直接读取。在上面的示例中,outfile4.csv将是唯一可读的文件。在交换第3行和第4行时,outfile3.csv将是可读的。对于outfile4.csv,将创建一个名称完全相同的新文件,该文件不能被created打开。不过,Notepad++能够打开它。
在Windows资源管理器中如下所示:
\\myNAS\path\to
outfile4.csv (working)
outfile4.csv (not working)怎么会有两个同名的文件呢?其中一个在工作而另一个却不起作用?
发布于 2016-07-18 19:17:39
在写这个问题的时候,我自己解决了,但我还是想把它发出去让别人看看.
这里是解决方案:--我使用Notepad++在Windows上编写了脚本。我将它们保存在NAS上的专用脚本文件夹中。由NAS运行,似乎是有效的,但有一个小细节导致了问题。载运返回.
当Windows使用回车返回(\r) (\r) 和a linefeed (\n)导致新行的\r\n时,基于unix的系统只使用linefeed (\n)E 215
通过在windows机器上编写脚本,我基本上是这样写的:
mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv\r\n
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv\r\n
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv\r\n
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv在linux上读取文件会导致:
mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv?\n
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv?\n
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv?\n
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv我通过SSH列出了包含文件夹的内容,这给了我这样的发现:
ls -alh /path/to
... outfile4.csv
... outfile4.csv?我们就在这里!这就是为什么最后一个文件正在工作,而其他文件不工作的原因。这也是为什么可以有两个文件的“相同”名称。Windows根本不显示问题标记,这会造成许多混乱。
因此,如果有人有这个问题,他可能会偶然发现这条线,并节省一些时间。我想这是大多数人的常识,但我仍然是Linux的初学者,所以我不得不努力学习:)
https://stackoverflow.com/questions/38444241
复制相似问题