2013-02-13 50 views
0
#!/bin/bash 

# Reading 

cat /home/radiare/Desktop/first.txt | while read LINE 

do 
if [ "$LINE" == "false" ]; then 
echo "Inside first loop" 
break 
fi 
done 

cat /home/radiare/Desktop/second.txt | while read LINE 

do 
if [ "$LINE" == "false" ]; then 
echo "Inside second loop" 
break 
fi 
done 

在Ubuntu的客戶端,我可以執行這個腳本,並回聲裏面,如果語句正常工作。我在ubuntu服務器上做了同樣的事情,它不在if語句中。唯一的區別是我在服務器上使用sudo運行。不同的行爲從Ubuntu的服務器和Ubuntu的客戶端在Windows上

有什麼建議嗎?

+0

呵,與http://stackoverflow.com/questions/14848147/shell-script-did-read-file-using-cat幾乎相同的代碼。列出的文件是否存在於服務器上?如果它存在於服務器上,root是否有權訪問文件(例如遠程文件系統)?你有沒有看到任何錯誤? – Petesh 2013-02-13 10:48:33

+0

我沒有看到任何錯誤。該文件也使用sudo權限執行。它正在訪問的其他文件也有權讀取寫入。它正在運行直到結束,但它不會進入if循環。這意味着它不讀取指定的txt文檔。當我在控制檯中運行貓並回顯內容時,它會正確返回內容。 – user1597811 2013-02-13 10:52:10

+0

客戶端和服務器上的文件完全相同嗎?我的意思是字節相同? – Petesh 2013-02-13 10:54:23

回答

0

奇怪,我無法評論,但只能「回答」。

我認爲這個文件是MS DOS格式的,當你在windows下的ubuntu客戶端下運行這個腳本時,它理解了MS DOS格式,並相應地對待它。

但是,在服務器端,當您使用讀取LINE讀取MS DOS格式的行時,您還將讀取尾隨的\ r字符。

我敢打賭,這就是原因。嘗試

tr -d '\015' /home/radiare/Desktop/first.txt 

首先再次運行您的腳本。

相關問題