我想要做的工作是用“While ... do ... done”循环从文本文件中读取一行(目前该文件只包含一行,后面会增加行数)。奇怪的是它只能读取一些文本文件。我的代码是:为什么“While ... do ... done”循环无法读取文本文件?
...(previous commands to create "myfile.txt")...
while read -r line
do
echo "flag"
done < "myfile.txt"
我已经尝试了一些情况。如果我用手工在当前目录中创建的另一个文件“test.txt”替换了“myfile.txt”(这个“test.txt”也包含一行),我的脚本可以打印“flag”。同样,在创建“myfile.txt”之后,如果我修改并将其保存在当前目录中,然后运行我的脚本,它通常也可以打印“标志”。
除上述两种情况外,其他情况下我的脚本不能打印“标志”。 我也尝试在我的脚本中“chmod”和“touch”文本文件,就像下面这样,它也无法工作。
显然,我希望我的脚本能够读取文本文件的行,是否有人可以告诉我原因并提供解决方案?
顺便说一下,这个文件可以通过cat命令读取。
...(previous commands to create "myfile.txt")...
chmod 777 "myfile.txt"
touch "myfile.txt"
cat "myfile.txt" #(I can see the results of this line)
while read -r line
do
echo "flag"
done < "myfile.txt"
谢谢!
创建文本文件的整个代码大约是800行。但是,我想发布创建我的文本文件的行。他们是:
for(i = 1, i<=6, ++i){
...
ofstream myfile("myfile.txt", std::ios_base::app);
...
if(myfile.is_open()){
myfile << "rms_" << std::setprecision(3) << RMS_values ;
myfile.close();
}
}
****************我的解决方案开始******************* *********************
感谢上述回复。
我已经通过我和这个链接解决:https://unix.stackexchange.com/questions/31807/what-does-the-noeol-indicator-at-the-bottom-of-a-vim-edit-session-mean
的原因是我生产的文本文件的脚本,没有“\ n”结尾。因此,在VI中打开文本文件后,文本文件具有“[noeol]”图标。
根据上述链接,如果没有“[noeol]”,UNIX/LINUX将不会读取此文件。
解决方法很简单(看后),只需在“cout”结尾添加“< <”\ n“”即可。该线变为,
myfile << "rms_" << std::setprecision(3) << RMS_values << "\n";
****************我的解决方案结束******************* *********************
我不知道'bash'scripting,但我想也许在你创建文件后,缓冲区没有被刷新,所以文件没有完全写入 – Zaiborg
你的脚本对我来说工作正常 - 你如何创建文件? –
@Zaiborg:文件只能在单个进程中不能刷新。由于每个shell命令都是独立的进程,这不是一个问题。 –