我想要做的工作是用「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命令都是獨立的進程,這不是一個問題。 –