不同的行为从Ubuntu的服务器和Ubuntu的客户端在Windows上

问题描述:

#!/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://*.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

奇怪,我无法评论,但只能“回答”。

我认为这个文件是MS DOS格式的,当你在windows下的ubuntu客户端下运行这个脚本时,它理解了MS DOS格式,并相应地对待它。

但是,在服务器端,当您使用读取LINE读取MS DOS格式的行时,您还将读取尾随的\ r字符。

我敢打赌,这就是原因。尝试

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

首先再次运行您的脚本。